我想更改以下内容:
% => '%
_ => '_
' => ''
例句:
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进行多次替换时先前插入的值。另请参阅本文档中的示例。