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

PHP中的iconv()和mb_convert_encoding()之间有什么区别?,php,character-encoding,special-characters,Php,Character Encoding,Special Characters,PHP中的iconv()和mb\u convert\u encoding()之间有什么区别?一个人是否表现得更好、更快等(如使用特定编码)?在什么情况下,一个会比另一个更受欢迎 以下是我认为我已经知道的: iconv() 包含在大多数PHP安装中 当发现无法映射到新字符集的字符时,可以指定是将其转换为“相似”字符,还是将其忽略 mb\u convert\u encoding() 通常需要安装php mbstring扩展 能够处理HTML-ENTITIES,在web十六进制代码之间进行转换 还有其

PHP中的
iconv()
mb\u convert\u encoding()
之间有什么区别?一个人是否表现得更好、更快等(如使用特定编码)?在什么情况下,一个会比另一个更受欢迎

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

iconv()

  • 包含在大多数PHP安装中
  • 当发现无法映射到新字符集的字符时,可以指定是将其转换为“相似”字符,还是将其忽略
  • mb\u convert\u encoding()

  • 通常需要安装php mbstring扩展
  • 能够处理
    HTML-ENTITIES
    ,在web十六进制代码之间进行转换
  • 还有其他区别吗?

    iconv()
    只是运行PHP的system C库中的
    iconv()
    函数的包装(除非PHP是用GNU iconv构建的,在这种情况下使用GNU iconv)。因此,
    iconv()
    的性能和特性取决于运行PHP的位置和构建方式

    另一方面,
    mb\u convert\u encoding()
    的实现包含在PHP(模块)源代码中。它包括一个名为libmbfl的库,用于处理实际转换。因此,无论您在哪里运行PHP,它都是一样的。此处有支持的编码列表:

    总之,如果您想支持不同的平台,我想您可以说
    mb\u convert\u encoding()
    更可靠。但是,如果在Linux上使用
    iconv()
    (例如),那么它支持更多的编码(请参见
    iconv--list


    显然,函数的相对性能还取决于特定的
    iconv()
    实现。

    因为PHP5.4存在一个bug。 有时iconv返回空字符串,而不是返回具有“相似”字符的字符串


    因此,您应该使用mb_convert_编码。

    相关:不能说这些函数中的任何函数是否以及何时会给您带来问题,因为您没有分享您运行的具体问题。与任何类型的函数一样,它只做特定的工作。因此,如果你在工作中使用了错误的函数,你总是会遇到问题。OP没有询问他的具体情况,然后没有提供详细信息,以确定其情况下的首选功能;相反,他要求了解两个似乎执行相同功能的PHP函数之间的差异。当然,这就引出了一个问题:为什么它们都存在?在什么情况下,一个会比另一个更受欢迎?这在范围上是特定的,在适用性上也是广泛的(任何在PHP中进行字符转换的人都想知道这一点)。问题不应该以“非建设性”结束。
    var\u dump(类似的文本('iconv','mb\u convert\u encoding'))
    表示
    4
    。所以答案是
    4
    。。。我通过谷歌搜索来到这里,寻找完全相同的信息,结果却对问题被拒绝感到失望。我看不出有什么问题。有
    //translatit
    //IGNORE
    选项来处理不可转换的字符。。阅读
    //忽略将使代码抛出错误的问题的注释。只能使用
    ini_集('mbstring.substitute_character','none')删除无效字符(请参阅)@sania_Zol True,但这是因为您使用的是glibc的iconv()实现。从理论上讲,它在其他平台上的工作方式可能会有所不同,因为.iconv-l
    for windowslink在这个bug上会有所帮助。我不认为这是PHP5.4 bug。当在生产服务器之间移动应用程序时,由于每个主机上的
    iconv
    版本不同,会产生差异。