PHP preg_functions多字节是否安全?

Spo*_*ace 29 php preg-replace multibyte preg-match

PHP中没有多字节'preg'函数,这是否意味着默认的preg_functions都是mb安全的?在php文档中找不到任何提及.

use*_*291 27

pcre支持utf8开箱即用,请参阅'u'修饰符的文档.

插图(\ xC3\xA4是德语字母"ä"的utf8编码)

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");
Run Code Online (Sandbox Code Playgroud)

这与"@@¤@"相呼应,因为"\ xC3"和"\ xA4"被视为不同的符号

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");
Run Code Online (Sandbox Code Playgroud)

(注意'u')打印"@@@",因为"\ xC3\xA4"被视为一个字母.


out*_*tis 25

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分支.