Php正则表达式字符编码问题

时间:2012-11-20 14:05:22

标签: php regex preg-match

当我搜索包含ü,õ,ö或ä字符的单词时,我的正则表达式不会考虑重音字符,因此找不到任何匹配。

$ data是使用strip_tags从HTML标签中剥离的HTML数据,并且包含带有ü,õ,ö和ä字符的单词,这些单词通过CURL从网站加载,字符编码为UTF-8(如返回的标题告诉我);

$data = strip_tags( curl_exec('my_website_url') );
$match = preg_match( '/ü/' , $data , $matches );

我尝试使用以下(也使用'ISO-8859-1'):

mb_internal_encoding("UTF-8");
mb_regex_encoding('UTF-8');

或:

$data = utf8_decode($data)

尚未成功。

2 个答案:

答案 0 :(得分:1)

确保您的PHP源文件也是UTF-8编码。

如果是例如ISO-8859-1,则preg_match指令中的ü将与UTF-8数据中的ü不同。

答案 1 :(得分:0)

你应该告诉PRCE你正在使用UTF-8,这是通过添加u修饰符 - >来完成的。 '/ü/u'。但是如果可能的话,不要将这些字符直接放入源代码中。如果您更改(或编辑将)文件的编码,您的代码将停止工作,并且跟踪它将是非常PITA。我建议,而不是直接使用'/ü/'将代码中的字符替换为代码:'/\x{c3bc}/u' - 0xc3bc就是您的来信。