八进制从阵列中签到字符串

时间:2009-11-22 11:08:50

标签: php string octal

我想将\46之类的八进制符号转换为&之类的正常符号 问题是输入是用preg_match_all()创建的,放入数组然后检索。

如果我手动将\46八进制表示法输入到带双引号的变量中,例如
$input="\046";
然后PHP会很好地转换它。

但当我从preg_match_all()进入数组时,它会将其返回到未转换状态。

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

4 个答案:

答案 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";