2009-11-22 36 views
2

我想将八进制符号像\46转换为正常符号,如&
问题是输入是使用preg_match_all()创建的,放入一个数组然后检索。八进制数组登录字符串

如果我手动输入\46八进制与双引号的变量,像
$input="\046";
那么PHP将好听转换。

但是,当我把它放入preg_match_all()的一个数组中时,它将返回它未转换。

我想转换它,因为我想查询具有“&”符号作为&符号的记录的数据库(mysql)。

+0

为什么这是一个社区wiki? – 2009-11-22 13:00:27

+0

@carlos嗯...为其他人编辑:) – Chris 2009-11-22 15:46:14

+1

是的,但我会说这不是常规类型问题的最佳选择“我该怎么做?”以及相应的答案,因为它不会声望积分。无论如何,我很高兴帮助:) – 2009-11-22 20:43:26

回答

2

使用stripcslashes()

stripcslashes documentation

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 
1

不是特别优雅,但你可以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"; 

?> 
0

,但是当我有它在阵列从预浸匹配所有,它返回它不转换。

尝试:

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

有一个有趣的替代招(或者说黑客)

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