PHP preg_functions多字节安全吗?
2022-08-30 14:34:07
PHP中没有可用的多字节“preg”函数,那么这是否意味着默认preg_functions都是mb安全的?在 php 文档中找不到任何提及。
PHP中没有可用的多字节“preg”函数,那么这是否意味着默认preg_functions都是mb安全的?在 php 文档中找不到任何提及。
pcre 开箱即用地支持 utf8,请参阅“u”修饰符的文档。
插图 (\xC3\xA4 是德语字母“ä”的 utf8 编码)
echo preg_replace('~\w~', '@', "a\xC3\xA4b");
这回显了“@@¤@”,因为“\xC3”和“\xA4”被视为不同的符号
echo preg_replace('~\w~u', '@', "a\xC3\xA4b");
(注意'u')打印“@@@”,因为“\xC3\xA4”被视为单个字母。
PCRE 可以支持 UTF-8 和其他 Unicode 编码,但必须在编译时指定。从 PCRE 8.0 的手册页:
PCRE 的当前实现与 Perl 5.10 大致对应,包括对 UTF-8 编码字符串和 Unicode 常规类别属性的支持。但是,必须显式启用 UTF-8 和 Unicode 支持。它不是默认值。Unicode 表对应于 Unicode 5.1 版。
PHP目前使用PCRE 7.9;您的系统可能有较旧的版本。
看看 PHP 5.2 附带的 PCRE 库,它似乎被配置为支持 Unicode 属性和 UTF-8。5.3 分支也是如此。