在 PHP preg_replace 的替换参数中转义引用相似之处


Escaping reference look-alikes in the replacement parameter of PHP preg_replace

我想用预定的替换替换,如"''''23"和"[4]"替换主题字符串"r r"中的模式字符串"/r/"。所以(只显示我的替换数组的一个子集)我尝试:

$subject = 'r r';
$replacements = array('"''23"', '[4]');
$replacements = array_map('preg_quote', $replacements);
print_r($replacements);
foreach($replacements as $replacement){
    $subject = preg_replace('/r/', $replacement, $subject, 1);
}
echo $subject;

我想要的字符串是"''''23" [4]',但是我得到了"''23"''[4'']",它既缺少字符又有其他字符。

PHP 是否有可以在这里工作的转义函数? 我该怎么做?

注意:如果没有preg_quote行,结果是"[4]"。

preg_quote函数只需要preg_replace的第一个参数,如果它应该被转义,所以删除它

要将r替换为"''23",您需要使用:

$subject = 'r r';
$replacements = array('"''''23"', '[4]'); // here is double escaping, but only in code, for input you do no need to escape anyhitng
foreach ($replacements as $replacement)
    $subject = preg_replace('/r/', addcslashes($replacement, ''''), $subject, 1); // here is the addition of ' only to ', as it is required by preg_replace
echo $subject;

http://php.net/manual/en/function.preg-replace.php

要在替换中使用反斜杠,它必须加倍("''''''''" PHP 字符串)。