preg_replace用奇怪的字符替换引号?

时间:2018-04-17 17:18:33

标签: php regex character-encoding preg-replace

如果我执行以下代码:

$string =  'This is “Bob” Batman.';
echo $string . '<br>';
$string = preg_replace('/(["“”„]Bob["“„])/',  '-$1-', $string);
echo $string;

然后结果是

  

这是“鲍勃”蝙蝠侠。

     

这是 - Bob - 蝙蝠侠。

为什么最后一行不是这样的:

  

这是 - “鲍勃” - 蝙蝠侠。

2 个答案:

答案 0 :(得分:1)

这是格式化问题。

您可以使用正则表达式u标记来解决您的问题:

$string = preg_replace('/(["“”„]Bob["“”„])/u',  '-$1-', $string);

答案 1 :(得分:1)

您可以将此正则表达式用于unicode模式:

echo preg_replace('/["“”„]Bob["“”„]/u',  '-$0-', $string);
//=> This is -“Bob”- Batman.

RegEx Demo