5

这个问题询问如何检测 UTF-8 字符串 -如何检测是否必须在字符串上应用 utf8 解码或编码?

解决方案是这样的:

if (preg_match('!!u', $string))
{
   // this is utf-8
}
else 
{
   // definitely not utf-8
}

我一直无法弄清楚如何分解“!!u”表达式。我点击了所有 PHP 的 PCRE 内容,可能错过了“!”的描述。标记和“u”-东西。我尝试通过 perl 的 YAPE::Regex::Explain 运行它(如请解释这个 Perl 正则表达式中所见)并且无法得到有意义的东西 [我不是 perl 专家 - 不知道我是否喂它正确的表达式/字符串]。

那么......究竟是如何preg_match('!!u', $string)工作的?

4

2 回答 2

7

这只是一个空的正则表达式。!分隔符u修饰符

至于它为什么起作用,来自 PHP Manual 对u修饰符的描述(强调我的):

此修饰符打开与 Perl 不兼容的 PCRE 的附加功能。模式字符串被视为 UTF-8。此修饰符在 Unix 上的 PHP 4.1.0 或更高版本以及 win32 上的 PHP 4.2.3 中可用。自 PHP 4.3.5 起检查模式的 UTF-8 有效性。

于 2012-06-01T18:46:38.280 回答
5

!被用作分隔符而不是/. 我会为你重写这个,//u是一样的。这u是一个将模式视为 utf8 的修饰符。

于 2012-06-01T18:46:57.047 回答