簡體   English   中英

preg_match和(非英語)拉丁字符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM