Preg_replace特殊字符错误


preg_replace errors on special characters

我想更改以下内容:
% => '%
_  => '_
'   => ''

例句:

1. ali% sdn bhd -> ali'% sdn bhd
2. ali_ sdn bhd -> ali'_ sdn bhd
3. ali' sdn bhd -> ali'' sdn bhd

代码如下:

<?php
$special_characters = array("%","_","''");
$replace_special_characters = array("''%","''_","''''''''");
foreach($special_characters as $value)
{   
        if(strpos($companyname, $value) !== FALSE)
        {
            $companyname = preg_replace('/'.$value.'/', $replace_special_characters, $companyname);   //ERROR HERE
        }   
}
?>
但是,从上面的输出中,我得到了这个错误:
Warning: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array ...

我写错了哪一部分?我应该如何修改它?

问题是您不能使用preg_replace用array替换string

你必须得到你的元素在数组中的位置,然后得到替换使用这个位置:

<?php
$special_characters = array("%","_","''");
$replace_special_characters = array("''%","''_","''''''''");
$i = 0; //set the original position
foreach($special_characters as $value)
{   
        if(strpos($companyname, $value) !== FALSE)
        {
            echo '/'.$value.'/';
            $companyname = preg_replace('/'.$value.'/', $replace_special_characters[$i], $companyname);   //Here you get replacement using the current position, so a string is set as replacement, not an array
        }   
        $i++;//after each value, you increment the position
}
?>

我不确定这段代码是否有效,但它向您展示了需要实现的逻辑

为什么不使用str_replace?

$string = 'ali% sdn bhd ali_ sdn bhd  ali' sdn bhd';
$res = str_replace(array("''","%","_"), array("''''","''%","''_"), $string);
echo $res,"'n";
输出:

ali'% sdn bhd ali'_ sdn bhd  ali'' sdn bhd

来自文档:

注意更换订单gotcha

因为str_replace()从左到右替换,所以它可以替换a进行多次替换时先前插入的值。另请参阅本文档中的示例。