PHP iconv 函数转gb2312的bug解决方法
问题:发现iconv在转换字符"—"到gb2312时会出错:
iconv( "UTF-8", "gb2312//IGNORE" , $data)
ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。
另外mb_convert_encoding没有这个bug,所以最好的写法是:
mb_convert_encoding($data, "gb2312", "UTF-8");
但是需要先enable mbstring 扩展库。
一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数。
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;
1 |
$content = iconv( "GBK" , "UTF-8″, $content ); |
2 |
$content = mb_convert_encoding( $content , "UTF-8″, " GBK"); |