为何PHP文档称PHP不支持Unicode?实际可处理UTF-8字符串
为什么PHP文档称PHP不支持Unicode?
PHP文档中提到:
这意味着PHP仅支持256字符集,因此不提供原生Unicode支持
但实际使用中,我们可以直接将UTF-8字符串字面量赋值给变量:
$str = "γεια";
也能借助相关函数处理UTF-8字符串:
echo mb_strlen($str, "UTF-8");
出现这种看似矛盾的情况,核心原因在于PHP原生字符串的本质是字节数组,而非Unicode字符序列:
- PHP的原生字符串函数(如
strlen())是按字节处理的,它不会识别Unicode字符。比如上面的$str,用strlen()会返回8(每个希腊字符在UTF-8中占2字节),而非实际的4个字符,这就是原生不支持Unicode的体现。 - 你能直接赋值UTF-8字符串,只是因为PHP原封不动存储了这些字节,它本身并不“知晓”这是Unicode编码的字符。
mb_strlen()这类函数属于PHP的多字节字符串扩展(mbstring),是额外提供的工具,需要你手动指定编码才能正确解析Unicode字符,并非PHP核心原生具备的能力。
简言之:PHP原生只处理字节,不理解Unicode字符;UTF-8字符串的正常使用依赖扩展的编码解析能力,而非PHP本身的原生Unicode支持。
内容的提问来源于stack exchange,提问作者user8240761
相关产品推荐
相关产品推荐

