PHP中iconv()
和mb_convert_encoding()
之间的区别是什么?一个人表现得更好,更快,等等(例如,使用特定的编码)?在什么情况下,一个人比另一个人更受欢迎?
以下是我认为我已经知道的事情:
的iconv()
mb_convert_encoding()
HTML-ENTITIES
,转换为和来自网络十六进制代码。还有其他差异吗?
答案 0 :(得分:27)
iconv()
只是在运行PHP的系统C库中找到的iconv()
函数的包装器(除非PHP是使用GNU iconv构建的,在这种情况下使用GNU iconv)。因此iconv()
的性能和功能取决于您运行PHP的位置以及它的构建方式。
另一方面,mb_convert_encoding()
的实现包含在PHP(模块)源中。它包含一个名为libmbfl的库,用于处理实际的转换。因此,无论您在何处运行PHP,它的工作方式都相同。这里有一个支持的编码列表:http://php.net/manual/en/mbstring.encodings.php
因此,总而言之,如果您想支持不同的平台,我想您可以说mb_convert_encoding()
更可靠。但是,如果您在Linux上使用iconv()
(例如),那么它支持更多编码(请参阅iconv --list
)。
显然,函数的相对性能还取决于具体的iconv()
实现。
答案 1 :(得分:3)
自PHP 5.4以来,存在一个错误。 有时iconv会返回空字符串,而不是返回一个字符串,其中包含类似的'炭。
所以你应该使用mb_convert_encoding。