PHP preg_uu/utf-8开关-不了解它在实践中的作用

PHP preg_uu/utf-8开关-不了解它在实践中的作用,php,encoding,utf-8,preg-replace,preg-match,Php,Encoding,Utf 8,Preg Replace,Preg Match,我正在将php/mariadb web应用程序从latin1转换为utf-8。我有它的工作,但我没有使用/u开关对我的任何preg_uu语句,它似乎工作良好。我试过俄语、中国传统和简单语、日语、阿拉伯语和印度语的样本。该应用程序的一部分是一个wiki,它广泛使用preg语句,并且运行良好 那么preg/u开关应该做什么呢。。。如果没有它,它似乎工作得很好 我已经查找了两周的相关信息,但我找不到任何东西可以解释/u开关的使用与“不”使用的区别 我已经确定我的php使用的prce中确实有utf-8

我正在将php/mariadb web应用程序从latin1转换为utf-8。我有它的工作,但我没有使用/u开关对我的任何preg_uu语句,它似乎工作良好。我试过俄语、中国传统和简单语、日语、阿拉伯语和印度语的样本。该应用程序的一部分是一个wiki,它广泛使用preg语句,并且运行良好

那么preg/u开关应该做什么呢。。。如果没有它,它似乎工作得很好

我已经查找了两周的相关信息,但我找不到任何东西可以解释/u开关的使用与“不”使用的区别


我已经确定我的php使用的prce中确实有utf-8 pcre特性。我使用的是PHPV5.6.20和5.5.32。我的网页、mysql驱动程序和mariadb都使用utf-8。

PCRE在决定如何处理某些匹配情况时使用
u
修饰符。例如,对于点元字符,允许多个字节,假设它们形成有效的UTF-8序列:

preg_match('/^.$/', '老');  // 0
preg_match('/^.$/u', '老'); // 1
另一个示例是,在考虑角色类所涵盖的内容时:

preg_match('/^[[:print:]]$/', '老'); // 0
preg_match('/^[[:print:]]$/u', '老'); // 1

当直接在正则表达式中包含UTF-8(或者实际上是以任何其他编码方式编码的字符串)时,
u
修饰符实际上没有任何区别,因为PCRE最终将逐字节匹配。

PCRE在决定如何处理某些匹配情况时使用
u
修饰符。例如,对于点元字符,允许多个字节,假设它们形成有效的UTF-8序列:

preg_match('/^.$/', '老');  // 0
preg_match('/^.$/u', '老'); // 1
另一个示例是,在考虑角色类所涵盖的内容时:

preg_match('/^[[:print:]]$/', '老'); // 0
preg_match('/^[[:print:]]$/u', '老'); // 1

当直接在正则表达式中包含UTF-8(或者实际上是以任何其他编码方式编码的字符串)时,
u
修饰符实际上没有任何区别,因为PCRE最终将逐字节匹配。

Oh!好啊我现在明白了。它会影响元字符匹配!这就是我没有理解的区别。现在有意义了,因为其他修饰符(gsi)也会影响元字符匹配的工作方式。谢谢你的澄清。你让我开心!:-)哦好啊我现在明白了。它会影响元字符匹配!这就是我没有理解的区别。现在有意义了,因为其他修饰符(gsi)也会影响元字符匹配的工作方式。谢谢你的澄清。你让我开心!:-)