您好,欢迎访问一九零五行业门户网

php字符串编码转换 iconv与mb_convert_encoding的区别

php判断字符串编码函数mb_detect_encoding总结
iconv — convert string to requested character encoding(php 4 >= 4.0.5, php 5)
mb_convert_encoding — convert character encoding(php 4 >= 4.0.6, php 5)
iconv — 字符串按要求的字符编码来转换
mb_convert_encoding — 转换字符的编码
这两个函数功能类似都是用来转换字符串编码的;
用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] ) 
注:需要先启用 mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉
参数:str——要编码的str、to_encoding——str要转换成编码类型、from_encoding——在转换前通过字符代码名称来指定。 它可以是一个 array 也可以是逗号分隔的枚举列表。 如果没有提供 from_encoding,则会使用内部(internal)编码。 参见支持的编码。
支持的字符编码
当前 mbstring 模块支持以下的字符编码。这些字符编码中的任意一个都能指定到 mbstring 函数中的 encoding 参数。
该 php 扩展支持的字符编码有以下几种:
ucs-4*
    ucs-4be
    ucs-4le*
    ucs-2
    ucs-2be
    ucs-2le
    utf-32*
    utf-32be*
    utf-32le*
    utf-16*
    utf-16be*
    utf-16le*
    utf-7
    utf7-imap
    utf-8*
    ascii*
    euc-jp*
    sjis*
    eucjp-win*
    sjis-win*
    iso-2022-jp
    iso-2022-jp-ms
    cp932
    cp51932
    sjis-mac** (别名: macjapanese)
    sjis-mobile#docomo** (别名: sjis-docomo)
    sjis-mobile#kddi** (别名: sjis-kddi)
    sjis-mobile#softbank** (别名: sjis-softbank)
    utf-8-mobile#docomo** (别名: utf-8-docomo)
    utf-8-mobile#kddi-a**
    utf-8-mobile#kddi-b** (别名: utf-8-kddi)
    utf-8-mobile#softbank** (别名: utf-8-softbank)
    iso-2022-jp-mobile#kddi** (别名: iso-2022-jp-kddi)
    jis
    jis-ms
    cp50220
    cp50220raw
    cp50221
    cp50222
    iso-8859-1*
    iso-8859-2*
    iso-8859-3*
    iso-8859-4*
    iso-8859-5*
    iso-8859-6*
    iso-8859-7*
    iso-8859-8*
    iso-8859-9*
    iso-8859-10*
    iso-8859-13*
    iso-8859-14*
    iso-8859-15*
    byte2be
    byte2le
    byte4be
    byte4le
    base64
    html-entities
    7bit
    8bit
    euc-cn*
    cp936
    gb18030**
    hz
    euc-tw*
    cp950
    big-5*
    euc-kr*
    uhc (cp949)
    iso-2022-kr
    windows-1251 (cp1251)
    windows-1252 (cp1252)
    cp866 (ibm866)
    koi8-r*
* 表示该编码也可以在正则表达式中使用。
** 表示该编码自 php 5.4.0 始可用。
任何接受编码名称的 php.ini 条目同样也可以使用 auto 和 pass 的值。 接受编码名的 mbstring 函数同样也可以使用值 auto。
如果设置了 pass,将不会对字符的编码进行转化。
如果设置了 auto,它将扩展成 nls 中定义的每个字符编码列表。 比如,假设 nls 设置为 japanese,值将会认为是 ascii,jis,utf-8,euc-jp,sjis。
nls:国家语言支持(national language support)
string iconv ( string in_charset, string out_charset, string str ) 注意:
第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://translit 和 //ignore,
其中:
//translit 会自动将不能直接转化的字符变成一个或多个近似的字符,
//ignore 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。
returns the converted string or false on failure. (返回转换后的字符串;如果执行失败将返回false。)
使用:
1. 发现iconv在转换字符 - 到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个 - 都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug。
2. mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别, 但是执行效率比iconv差太多;如:
$str = mb_convert_encoding($str,euc-jp,ascii,jis,euc-jp,sjis,utf-8);“ascii,jis,euc-jp,sjis,utf-8”的顺序不同效果也有差异 。
3. 一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数 。
from_encoding is specified by character code name before conversion. it can be array or string - comma separated
enumerated list. if it is not specified, the internal encoding will be used.
$str = mb_convert_encoding($str, ucs-2le, jis, eucjp-win, sjis-win);
$str = mb_convert_encoding($str, euc-jp', auto);
例子:
$content = iconv(gbk, utf-8, $content);
$content = mb_convert_encoding($content, utf-8, gbk);
/* 转换内部编码为 sjis */$str = mb_convert_encoding($str, sjis);/* 将 euc-jp 转换成 utf-7 */$str = mb_convert_encoding($str, utf-7, euc-jp);/* 从 jis, eucjp-win, sjis-win 中自动检测编码,并转换 str 到 ucs-2le */$str = mb_convert_encoding($str, ucs-2le, jis, eucjp-win, sjis-win);/* auto 扩展成 ascii,jis,utf-8,euc-jp,sjis */$str = mb_convert_encoding($str, euc-jp, auto);
$text = this is the euro symbol '€'.;echo 'original : ', $text, php_eol;echo 'translit : ', iconv(utf-8, iso-8859-1//translit, $text), php_eol;echo 'ignore : ', iconv(utf-8, iso-8859-1//ignore, $text), php_eol;echo 'plain : ', iconv(utf-8, iso-8859-1, $text), php_eol;输出结果: original : this is the euro symbol '€'.translit : this is the euro symbol 'eur'.ignore : this is the euro symbol ''.plain :notice: iconv(): detected an illegal character in input string in .\iconv-example.php on line 7this is the euro symbol '
其它类似信息

推荐信息