用 preg_replace 转义 $0, $1, ..
escape $0, $1, .. with preg_replace
我有类似的东西:
<?php
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test [=11=]';
$text = preg_replace($pattern, $value, $text);
?>
我希望 $text 的最终值为 'test [=22=] ipsum'。问题是 $0 被解释为变量并替换为 'lorem',所以我得到 'test lorem ipsum'.
有没有办法禁用 preg_replace() 的这个功能?
上面的例子当然是简化了的。我实际上在做的是制作一个模板脚本,我用文件内容替换占位符,可以是 javascript、html 等...所以对 [=25 采取行动会很棒=] 函数本身而不是被迫修改所有文件以确保它们具有转义字符。
谢谢
您可以 preg_replace
对替换值中的任何反向引用进行转义:
<?php
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test [=10=]';
echo preg_replace($pattern, preg_replace('/$(\d+)/', '\$', $value), $text);
$(\d+)
搜索任何 $
,然后搜索一个或多个数字
\$
将 $
替换为 $
,因为第一个 \
将反斜杠转义为 PHP 的文字。
是第一个捕获组,它是数字。
使用 preg_quote,它是该操作的正确工具:
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test [=10=]';
$text = preg_replace($pattern, preg_quote($value), $text);
echo $text;
输出:
test [=11=] ipsum
我有类似的东西:
<?php
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test [=11=]';
$text = preg_replace($pattern, $value, $text);
?>
我希望 $text 的最终值为 'test [=22=] ipsum'。问题是 $0 被解释为变量并替换为 'lorem',所以我得到 'test lorem ipsum'.
有没有办法禁用 preg_replace() 的这个功能?
上面的例子当然是简化了的。我实际上在做的是制作一个模板脚本,我用文件内容替换占位符,可以是 javascript、html 等...所以对 [=25 采取行动会很棒=] 函数本身而不是被迫修改所有文件以确保它们具有转义字符。
谢谢
您可以 preg_replace
对替换值中的任何反向引用进行转义:
<?php
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test [=10=]';
echo preg_replace($pattern, preg_replace('/$(\d+)/', '\$', $value), $text);
$(\d+)
搜索任何 $
,然后搜索一个或多个数字
\$
将 $
替换为 $
,因为第一个 \
将反斜杠转义为 PHP 的文字。 是第一个捕获组,它是数字。
使用 preg_quote,它是该操作的正确工具:
$text = 'lorem ipsum';
$pattern = '/lorem/';
$value = 'test [=10=]';
$text = preg_replace($pattern, preg_quote($value), $text);
echo $text;
输出:
test [=11=] ipsum