在过去的几天里,我一直在努力将我的PHP代码库从latin1转换为UTF-8。我读到过两种主要的解决方案,一种是用内置的多字节函数替换单字节函数,另一种是在php.ini文件中设置mbstring.func_overload值。
但是后来我在堆栈溢出上遇到了UTF线程,其中thomasrutter的post似乎表明this -8实际上并不需要多字节函数,只要脚本和字符串文字是用UTF-8编码的。
我还没有发现任何其他证据,无论这是真的还是假的,如果事实证明我不需要将我的代码转换为mb_functions,那么这将是一个实时的节省!有没有人能解释这件事?
发布于 2009-11-17 04:17:10
它们不是“必要的”,除非您正在使用任何functions they replace (很可能至少使用其中的一个),或者显式地需要扩展的一个特性,比如HTTP handling。
在实现UTF8兼容时,我总是使用PHP UTF-8 Cheatsheet,但增加了一项内容:需要更新PCRE模式以使用u修饰符。
发布于 2009-11-17 04:19:44
只要检查或修改多字节字符串,就需要使用mb_*函数。一个非常快速的例子说明了原因:
$str = "abcžđščćöçefg";
mb_internal_encoding("UTF-8");
echo "strlen: ".strlen($str)."\n";
echo "mb_strlen: ".mb_strlen($str)."\n";这将打印出来:
strlen: 20
mb_strlen: 13发布于 2009-11-17 04:10:44
thomasrutter表示search不需要特殊处理。例如,如果需要检查UTF8字符串的长度,我不明白如何使用普通的strlen()来实现。
https://stackoverflow.com/questions/1744473
复制相似问题