[英]preg_match and (non-English) Latin characters?
我有一個XHTML表單,要求人們輸入他們的全名。 然后,我使用以下模式將其與preg_match()
匹配: /^[\\p{L}\\s]+$/
在運行PHP 5.2.13(PCRE 7.9 2009-04-11)的本地服務器上,此方法正常工作。 在運行PHP 5.2.10(PCRE 7.3 2007-08-28)的Web主機上,當輸入的字符串包含丹麥拉丁字符ø( http://www.ltg.ed.ac.uk/~richard/ utf-8.cgi?input =%F8&mode = char )。
這是錯誤嗎? 有沒有解決的辦法?
先感謝您!
因此,問題是假定的。 您沒有使用/u
修飾符。 這意味着PCRE將不會查找UTF-8字符。
無論如何,這是應該做的:
var_dump(preg_match('/^[\p{L}\s]+$/u', "ø"));
並適用於我的所有版本。 其他人可能存在錯誤,但這在這里不太可能。
您的問題是,這也有效:
var_dump(preg_match('/^[\p{L}\s]+$/', utf8_decode("ø")));
請注意,這使用ISO-8859-1而不是UTF-8,並省略了/u
修飾符。 結果是int(1)
。 顯然PCRE解釋Latin-1的ø
作為匹配\\p{L}
當在非/u
nicode模式。 (大多數單字節\\ xA0- \\ xFF是Latin-1中的字母符號,其8位代碼點與Unicode中的相同,因此實際上是可以的。)
結論:您的輸入實際上是ISO-8859-1。 這就是為什么不帶/u
偶然為您工作的原因。 更改它,並與輸入字符集保持一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.