【问题标题】:What is the difference between iconv() and mb_convert_encoding() in PHP?PHP 中的 iconv() 和 mb_convert_encoding() 有什么区别?
【发布时间】:2012-01-04 05:35:45
【问题描述】:

PHP 中的iconv()mb_convert_encoding() 有什么区别?一个性能更好,更快等(例如使用特定编码)吗?在什么情况下,一种会比另一种更受欢迎?

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

iconv()

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

mb_convert_encoding()

  1. 通常需要安装 php-mbstring 扩展。
  2. 能够处理HTML-ENTITIES,与网络十六进制代码相互转换。

还有其他区别吗?

【问题讨论】:

  • 无法确定这些功能是否以及何时会给您带来问题,因为您没有分享您遇到的具体问题。与任何类型的功能一样,它只完成特定的工作。所以如果你在工作中使用了错误的函数,你总是会遇到问题。
  • 这是一个热门且有用的问题。 OP 没有询问他的具体情况,然后未能提供详细信息以确定他的情况下的首选功能;相反,他要求提供有关两个似乎执行相同功能的 PHP 函数之间差异的信息。当然,这引出了一个问题:为什么它们都存在,以及在什么情况下一个会比另一个更受欢迎?这在范围上是特定的,并且在适用性上很广泛(任何在 PHP 中进行字符转换的人都想知道这一点)。问题不应该因为“不具建设性”而结束。
  • var_dump(similar_text('iconv','mb_convert_encoding'))4。所以答案是4
  • 我同意 Josh 的观点...我通过 Google 搜索来到这里,寻找完全相同的信息,结果却对问题被拒绝感到失望。我看不出有什么问题。

标签: php character-encoding special-characters


【解决方案1】:

自 PHP 5.4 以来存在一个错误。 有时 iconv 返回空字符串,而不是返回具有“相似”字符的字符串。

所以你应该使用 mb_convert_encoding。

【讨论】:

  • 此错误的链接会有所帮助
  • 我不认为这是 PHP 5.4 的错误。我们在生产服务器之间移动应用程序时遇到了这个问题,每个主机上的iconv 版本不同会导致差异。
【解决方案2】:

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() 实现。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 2018-11-18
  • 1970-01-01
  • 2016-03-20
  • 2012-03-08
  • 2011-03-10
相关资源
最近更新 更多