Octal для ввода строки из массива

Я хочу преобразовать восьмеричный знак, например, \46 в обычный знак, например & .
Проблема в том, что вход создается с помощью preg_match_all() , помещается в массив и затем извлекается.

Если бы я вручную \46 восьмеричную нотацию \46 в переменную с двойными кавычками, например
$input="\046";
то PHP будет легко конвертировать его.

Но когда я получаю его в массив из preg_match_all() , он возвращает его без преобразования.

Я хочу преобразовать его, потому что хочу запросить базу данных (mysql), у которой есть записи с символом «&» как амперсанд.

Использовать stripcslashes()

Из документации stripcslashes :

string stripcslashes ( string $str )
Возвращает строку с удаленной обратной косой чертой.
Распознает C-like \ n, \ r …, восьмеричное и шестнадцатеричное представление.

 <?php $a = 'a \046 b \075 c'; $b = stripcslashes($a); echo "$a ==> $b"; ?> outputs: a \046 b \075 c ==> a & b = c 

есть интересный трюк замены (или, скорее, взломать)

 $a = 'a \046 b \075 c'; echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a); 

Не особенно элегантный, но вы можете eval строку. Конечно, это тоже будет показывать что-то еще в строке, но, возможно, это то, что вы хотите. Если вы хотите, чтобы избежать переменных, вы должны заменить $ с \ $ в первую очередь.

 <?php // The string $a='test a \046 b'; // Output "test a \046 b" echo "$a\n"; // Convert \046 to & eval("\$c=\"$a\";"); // Output "test a & b" echo "$c\n"; ?> 

но когда у меня есть массив из preg match all, он возвращает его без преобразования.

Пытаться:

 $tmp=implode('', $array_from_pregmatch); $input="$tmp";