2

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

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

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

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

4

4 回答 4

2

有一个有趣的替换技巧(或者更确切地说是hack)

$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
于 2009-11-22T12:57:59.453 回答
2

采用stripcslashes()

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
于 2009-11-22T13:22:27.413 回答
1

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

?>
于 2009-11-22T11:37:05.363 回答
0

但是当我从 preg match all 的数组中得到它时,它会返回未转换的。

尝试:

$tmp=implode('', $array_from_pregmatch);
$input="$tmp";
于 2009-11-22T11:54:10.587 回答