Я хочу преобразовать восьмеричный знак, например, \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";