正则表达式改变文本,当它不应该

时间:2015-10-22 14:09:19

标签: php regex character-encoding

这很奇怪,我在网上找不到类似的东西。

我在希腊字符中有一个包含很多特殊字符的字符串表,所以我想删除它们。

function clean($string) {
   $string = preg_replace('/([$@!\?!\+\#\%\^\*\[\]\<\>\;\:\'\"\`\~\,\?\_\=\«\»])+/', ' ' ,$string);
   $string =  preg_replace('/\s+/', ' ',$string);
   return $string;
}
$prok=clean($row['name']);
echo $row['name'].'-'.$prok;

这是正常的,除非字符Π在字符串中。 如果是,Π将替换为问号。

example

有谁知道问题可能是什么?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用mb_ereg_replace来支持多字节:

function clean($string) {
   $string = mb_ereg_replace('/([$@!\?!\+\#\%\^\*\[\]\<\>\;\:\'\"\`\~\,\?\_\=\«\»])+/', ' ' ,$string);
   $string =  mb_ereg_replace('/\s+/', ' ',$string);
   return $string;
}
$prok=clean($row['name']);
echo $row['name'].'-'.$prok;

或者将/u修饰符用于unicode字符串:

function clean($string) {
   $string = preg_replace('/([$@!\?!\+\#\%\^\*\[\]\<\>\;\:\'\"\`\~\,\?\_\=\«\»])+/u', ' ' ,$string);
   $string =  preg_replace('/\s+/u', ' ',$string);
   return $string;
}
$prok=clean($row['name']);
echo $row['name'].'-'.$prok;