PHP中的iconv()和mb_convert_encoding()有什么区别?

时间:2011-11-22 20:39:57

标签: php character-encoding special-characters

PHP中iconv()mb_convert_encoding()之间的区别是什么?一个人表现得更好,更快,等等(例如,使用特定的编码)?在什么情况下,一个人比另一个人更受欢迎?

以下是我认为我已经知道的事情:

的iconv()

  1. 包含在大多数PHP安装中。
  2. 当找到无法映射到新字符集的字符时,您可以指定它们是否转换为“相似”字符,或者忽略它们。
  3. mb_convert_encoding()

    1. 通常需要安装php-mbstring扩展名。
    2. 能够处理HTML-ENTITIES,转换为和来自网络十六进制代码。
    3. 还有其他差异吗?

2 个答案:

答案 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。