用于从数组中签入字符串的八进制

发布于 2024-08-12 05:57:45 字数 353 浏览 9 评论 0原文

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

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

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

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

I want to convert octal sign like \46 to normal sign like &.
The problem is that the input is created with preg_match_all(), put into an array and then retrieved.

If I'd manually input the \46 octal notation into variable with double quotes, like
$input="\046";
then PHP would convert it nicely.

But when I have it into an array from preg_match_all(), it returns it unconverted.

I want to convert it because I want to query database (mysql) that have records with "&" sign as ampersand.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

北凤男飞 2024-08-19 05:57:45

使用

stripcslashes 文档stripcslashes() >:

字符串 stripcslashes ( 字符串 $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

Use stripcslashes()

From the stripcslashes documentation:

string stripcslashes ( string $str )
Returns a string with backslashes
stripped off.
Recognizes C-like \n,
\r ..., octal and hexadecimal
representation.

<?php
$a = 'a \046 b \075 c';
$b = stripcslashes($a);
echo "$a ==> $b";
?>

outputs: a \046 b \075 c ==> a & b = c
神妖 2024-08-19 05:57:45

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

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

there's an interesting replace trick (or rather hack)

$a = 'a \046 b \075 c';
echo preg_replace('~\\\\(0\d\d)~e', '"\\\\$1"', $a);
青丝拂面 2024-08-19 05:57:45

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

?>

Not particularly elegant, but you can eval the string. Of course, this will eval anything else in the string too, but maybe that is what you want. If you want to avoid evaling variables you should replace $ with \$ 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";

?>
失而复得 2024-08-19 05:57:45

但是当我将它放在 preg match all 的数组中时,它会返回未转换的值。

尝试:

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

but when i have it in array from preg match all, it return it unconverted.

Try:

$tmp=implode('', $array_from_pregmatch);
$input="$tmp";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文