PHP 中字符编码转换 iconv() 和 mb_convert_encoding() 的区别

来源:互联网 发布:优化语文教学五环节 编辑:程序博客网 时间:2024/05/19 00:52

近端遇到了字符串转化问题,发现PHP带了两种方法来转化,iconv()mb_convert_encoding(), 下面来说说他们的区别

1. mb_convert_encoding()

//官方文档string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding = mb_internal_encoding() ] )

说明: 将 string 类型 str 的字符编码从可选的 from_encoding 转换到 to_encoding。

from_encoding用来指定当前str的字符集。它可以是一个 array 也可以是逗号分隔的枚举列表。 如果没有提供 from_encoding,则会使用内部(internal)编码,会根据内部编码一个一个的比较,速度上会慢,所以要尽量指定少的编码。

2.iconv()

//官方文档string iconv ( string $in_charset , string $out_charset , string $str )

将字符串 str 从 in_charset 转换编码到 out_charset。

可以在out_charset后面也可以添加后缀

//TRANSLIT: 将启用转写(transliteration)功能,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。//IGNORE: 不能以目标字符集表达的字符将被默默丢弃,IGNORE 会忽略掉不能转化的字符。 否则,会导致一个 E_NOTICE并返回 FALSE。

iconv() 在转换中文的 ‘——’ 时,如果不指定//TRANSLIT 或者 //IGNORE,是会出错的(mb_convert_encoding() 无此BUG)。
这里写图片描述

当指定了//TRANSLIT 或者 //IGNORE 时
这里写图片描述

这里写图片描述

3.比较

相比之下,当知道当前的字符集编码时,应当首选 iconv() (要设置//TRANSLIT 或者 //IGNORE避免出错), 当大概知道编码时要尽量少的枚举,因为这影像速度。

阅读全文
0 0