Jon*_*lfs 6 php expression character-encoding preg-match
我有一个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)的webhost上,当输入的字符串包含丹麦语拉丁字符ø时,它不匹配(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', "ø"));
Run Code Online (Sandbox Code Playgroud)
适用于我的所有版本.其他人可能存在错误,但这不太可能.
你的问题是这也有效:
var_dump(preg_match('/^[\p{L}\s]+$/', utf8_decode("ø")));
Run Code Online (Sandbox Code Playgroud)
请注意,这使用ISO-8859-1而不是UTF-8,并省略了/u修饰符.结果是int(1).显然,PCRE 在非nicode模式下将Latin-1解释ø为匹配.(大多数单字节\ xA0-\xFF是Latin-1中的字母符号,8位代码点与Unicode中相同,所以这实际上没问题.)\p{L}/u
结论:您的输入实际上是ISO-8859-1.这就是为什么没有它就意外地为你工作的原因/u.改变它,并与输入字符集eaxact.
| 归档时间: |
|
| 查看次数: |
5938 次 |
| 最近记录: |