这个问题问如何检测 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)
究竟是如何工作的呢?
它只是一个空的正则表达式。 !
是分隔符,u
是修饰符。
至于它为什么有效,来自 PHP 手册对 u
修饰符的描述(强调我的):
此修饰符打开了与Perl不兼容的PCRE的附加功能。模式字符串被视为 UTF-8。此修饰符在 Unix 上可从 PHP 4.1.0 或更高版本使用,在 win32 上可从 PHP 4.2.3 获得。从 PHP 4.3.5 开始检查模式的 UTF-8 有效性。
!
被用作分隔符而不是/
。我会为你重写这个,//u
是一样的。u
是一个修饰符,它将模式视为 utf8。