gpt4 book ai didi

php - preg_match 和(非英语)拉丁字符?

转载 作者:可可西里 更新时间:2023-11-01 13:16:51 25 4
gpt4 key购买 nike

我有一个 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) 的虚拟主机上,当输入的字符串包含丹麦拉丁字符 ø ( 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)。显然,在非 /unicode 模式下,PCRE 将 Latin-1 ø 解释为匹配的 \p{L}。 (单字节的\xA0-\xFF大部分是Latin-1中的字母符号,8位码位和Unicode一样,所以其实没问题。)

结论:您的输入实际上是 ISO-8859-1。这就是为什么它在没有 /u 的情况下意外地为您工作的原因。改变它,并与输入字符集保持一致。

关于php - preg_match 和(非英语)拉丁字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com