字符编码-PHP中的iconv()和mb_convert_encoding()有什么区别?

PHP中的HTML-ENTITIESmb_convert_encoding()有什么区别? 是否有更好,更快的性能(例如,使用特定的编码)? 在什么情况下,一个会比另一个更受青睐?

这是我想我已经知道的:

iconv()

  1. 大多数安装的PHP附带。
  2. 当找到无法映射到新字符集的字符时,您可以指定将其转换为“相似”字符还是忽略。

mb_convert_encoding()

  1. 通常需要安装php-mbstring扩展名。
  2. 能够处理HTML-ENTITIES,以及与Web十六进制代码之间的相互转换。

还有其他区别吗?

2个解决方案
28 votes

iconv()只是运行PHP的系统C库中iconv()函数的包装(除非PHP是使用GNU iconv构建的,在这种情况下使用GNU iconv)。 因此iconv --list的性能和功能取决于您在何处运行PHP及其构建方式。

另一方面,iconv()的实现包含在PHP(模块)源中。 它包括一个名为libmbfl的库,用于处理实际的转换。 因此,无论您在何处运行PHP,它的工作原理都相同。 这里有一个受支持的编码列表:[http://php.net/manual/en/mbstring.encodings.php]

因此,总而言之,我想您可以说如果要支持不同的平台,使用iconv()会更可靠。 但是,例如,如果在Linux上使用iconv(),则它支持更多的编码(请参阅iconv --list)。

这些功能的相对性能显然还取决于特定的iconv()实现。

pelle answered 2020-01-14T10:34:35Z
2 votes

从PHP 5.4开始,存在一个错误。有时iconv返回空字符串,而不是返回带有“相似”字符的字符串。

因此,您应该使用mb_convert_encoding。

webshaker answered 2020-01-14T10:34:59Z
translate from https://stackoverflow.com:/questions/8233517/what-is-the-difference-between-iconv-and-mb-convert-encoding-in-php