我想将八进制符号转换\46为普通符号&。
问题是输入是用创建的preg_match_all(),放入一个数组然后检索。
如果我手动将\46八进制表示法输入到带有双引号的变量中,
$input="\046";
那么 PHP 会很好地转换它。
但是当我将它放入一个数组时preg_match_all(),它会返回未转换的。
我想转换它,因为我想查询具有“&”符号作为&符号的记录的数据库(mysql)。
有一个有趣的替换技巧(或者更确切地说是hack)
$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
采用stripcslashes()
string stripcslashes ( string $str )
返回一个去掉反斜杠的字符串。
识别类 C 的 \n、\r ...、八进制和十六进制表示。
<?php
$a = 'a \046 b \075 c';
$b = stripcslashes($a);
echo "$a ==> $b";
?>
outputs: a \046 b \075 c ==> a & b = c
不是特别优雅,但可以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";