我想将八进制符号像\46
转换为正常符号,如&
。
问题是输入是使用preg_match_all()
创建的,放入一个数组然后检索。八进制数组登录字符串
如果我手动输入\46
八进制与双引号的变量,像
$input="\046";
那么PHP将好听转换。
但是,当我把它放入preg_match_all()
的一个数组中时,它将返回它未转换。
我想转换它,因为我想查询具有“&”符号作为&符号的记录的数据库(mysql)。
我想将八进制符号像\46
转换为正常符号,如&
。
问题是输入是使用preg_match_all()
创建的,放入一个数组然后检索。八进制数组登录字符串
如果我手动输入\46
八进制与双引号的变量,像
$input="\046";
那么PHP将好听转换。
但是,当我把它放入preg_match_all()
的一个数组中时,它将返回它未转换。
我想转换它,因为我想查询具有“&”符号作为&符号的记录的数据库(mysql)。
使用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
的字符串。当然,这也会评估字符串中的其他内容,但也许这就是你想要的。如果你想避免评估变量,你应该用\ $ first替换$。
<?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";
?>
,但是当我有它在阵列从预浸匹配所有,它返回它不转换。
尝试:
$tmp=implode('', $array_from_pregmatch);
$input="$tmp";
有一个有趣的替代招(或者说黑客)
$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
为什么这是一个社区wiki? – 2009-11-22 13:00:27
@carlos嗯...为其他人编辑:) – Chris 2009-11-22 15:46:14
是的,但我会说这不是常规类型问题的最佳选择“我该怎么做?”以及相应的答案,因为它不会声望积分。无论如何,我很高兴帮助:) – 2009-11-22 20:43:26