2012-04-08 28 views
5
echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה"); 

出於某種原因,這個代碼在多個服務器上,我測試了返回1,但是0一個特定的服務器上。的preg_replace + UTF-8沒有一臺服務器上的工作,但工作在另一個

PCRE編譯時支持UTF-8和Unicode屬性。可能是什麼問題?

+0

這個服務器的'locale'?來自Web服務器的默認字符集?檢查「firebug」頭文件編碼的響應 – ZiTAL 2012-04-08 15:24:44

+0

@ZTAL它與其他服務器上的一樣:Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3 – Lior 2012-04-08 15:38:36

+0

什麼是輸入這是什麼? 'print_r(mb_detect_order());' – ZiTAL 2012-04-08 15:54:54

回答

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來測試此設施。通過POSIX接口添加 REG_UCP以使其可用。

編輯: 只是做了一些測試,它在PHP 5.3.10和0的PHP 5.3.2和PHP 5.3.3給出了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)

相關問題