我想将\46
之类的八进制符号转换为&
之类的正常符号
问题是输入是用preg_match_all()
创建的,放入数组然后检索。
如果我手动将\46
八进制表示法输入到带双引号的变量中,例如
$input="\046";
然后PHP会很好地转换它。
但当我从preg_match_all()
进入数组时,它会将其返回到未转换状态。
我想转换它,因为我想查询具有“&”记录的数据库(mysql)签为&符号。
答案 0 :(得分:2)
有一个有趣的替换技巧(或者更确切地说是黑客)
$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
答案 1 :(得分:2)
使用stripcslashes()
来自stripcslashes documentation:
string stripcslashes ( string $str )
返回带反斜杠的字符串 剥离。
识别C样\ n, \ r \ n ...,八进制和十六进制 表示。
<?php
$a = 'a \046 b \075 c';
$b = stripcslashes($a);
echo "$a ==> $b";
?>
outputs: a \046 b \075 c ==> a & b = c
答案 2 :(得分:1)
不是特别优雅,但你可以eval
字符串。当然,这也会减少字符串中的任何其他内容,但也许这就是你想要的。如果你想避免使用evaling变量,你应该用$ $替换$。
<?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";
?>
答案 3 :(得分:0)
但是当我从preg match all中获取数组时,它会将其返回到未转换状态。
尝试:
$tmp=implode('', $array_from_pregmatch);
$input="$tmp";