php字符编码转换之gb2312转为utf8
在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦。 使用:发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数. 代码如下: /** *自动判断把gbk或gb2312编码的字符串转为utf8 *能自动判断输入字符串的编码类,如果本身是utf-8就不用转换,否则就转换为utf-8的字符串 *支持的字符编码类型是:utf-8,gbk,gb2312 *@$str:string 字符串 */ function yang_gbk2utf8($str){ $charset = mb_detect_encoding()($str,array('UTF-8','GBK','GB2312')); $charset = strtolower($charset); if('cp936' == $charset){ $charset='GBK'; } if("utf-8" != $charset){ $str = iconv($charset,"UTF-8//IGNORE",$str); } return $str; } 下面我接着看在转换字符编码的一些问题 用mb_detect_encoding($str);函数,使用该函数必须打开php的extension=php_mbstring.dll扩展 代码如下: $str="测试ing"; $cha=mb_detect_encoding($str); $s = iconv($cha,"UTF-8",$str); var_dump($s); ?> 结果返回: string(0) “” 真是奇怪,为什么会这样。 代码如下: $str="测试ing"; $cha=mb_detect_encoding($str); $s = iconv("GB2312",$str); var_dump($s); ?> 返回结果正确。发现该函数mb_detect_encoding($str);判断还是不准确。不知是什么原因。 函数string mb_convert_encoding ( string $str,string $to_encoding [,mixed $from_encoding ] ) 可以转换为指定编码的字符串,我写了例子 代码如下: $a="我很好"; 可结果是: ??潞?潞? 现在的问题就是我如果把不同的字符串编码形式统一转换为utf-8,如果事先知道改变吗可以用iconv,但如果不知道该编码该怎么办呢? 问题3:iconv问题,如果转换的字符串,第一个字节的编码大于一定的数会返回空. 如: 代码如下: $str=chr(254)."测试ing".chr(254); $s = iconv("GB2312",$str); var_dump($s); ?> 返回 string(0) “” mb_convert_encoding的用法见官方: http://cn.php.net/manual/en/function.mb-convert-encoding.php PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。 下面还有一些详细的例子: 代码如下: $content = iconv("GBK",$content); $content = mb_convert_encoding($content,"GBK"); ?> 这个可以根据输入输出的字符编码进行转换 代码如下: function phpcharset($data,$to) { if(is_array($data)) { foreach($data as $key => $val) { $data[$key] = phpcharset($val,$to); } } else { $encode_array = array('ASCII','UTF-8','GB2312','BIG5'); $encoded = mb_detect_encoding($data,$encode_array); $to = strtoupper($to); if($encoded != $to) { $data = mb_convert_encoding($data,$to,$encoded); } } return $data; } ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |