preg_replace + UTF-8在一台服务器上不起作用,但在另一台服务器上起作用

时间:2012-04-08 15:14:58

标签: php utf-8 preg-replace

echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה");

出于某种原因,此代码在我测试过的几台服务器上返回1,但在一台特定服务器上返回0。

PCRE编译时支持UTF-8和Unicode属性。可能是什么问题?

2 个答案:

答案 0 :(得分:2)

PHP使用的PCRE版本可能存在差异。

PHP和PCRE版本:http://php.net/pcre.installation

您应该使用8.10+(PHP 5.3.4 +)

Version 8.10 25-Jun-2010:

  
      
  1. 添加了PCRE_UCP以生成\ b,\ d,\ s,\ w和某些POSIX字符类   使用Unicode属性。可以使用模式开头的(* UCP)进行设置   这个选项。修改了pcretest以添加/ W来测试此工具。添加   REG_UCP使其可通过POSIX接口使用。
  2.   

修改 刚做了一些测试,它在PHP 5.3.10和PHP 5.3.2和PHP 5.3.3上给出了1。

答案 1 :(得分:1)

它可能取决于PCRE lib的版本。为了使事情更加规范化,请尝试使用“UCP动词”:preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה')

仍然需要PCRE v8.10,自5.3.4开始随PHP一起提供,或者在编译标志--with-pcre-regex=DIR中提到时。

Ref (in russian)