php字符编码转换之gb2312转为utf8 |
本文标签:php字符编码 在php中字符编码转换我们一般会用到iconv与mb_convert_encoding进行操作,但是mb_convert_encoding在转换性能上比iconv要差很多哦 。 使用: 复制代码 代码如下: /** *自动判断把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扩展 复制代码 代码如下: <?php $str="测试ing"; $cha=mb_detect_encoding($str); $s = iconv($cha,"UTF-8",$str); var_dump($s); ?> 结果返回: string(0) “” 真是奇怪,为什么会这样 。 复制代码 代码如下: <?php $str="测试ing"; $cha=mb_detect_encoding($str); $s = iconv("GB2312","UTF-8",$str); var_dump($s); ?> 返回结果正确 。发现该函数mb_detect_encoding($str);判断还是不准确 。不知是什么原因 。 函数string mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] ) 可以转换为指定编码的字符串,我写了例子 复制代码 代码如下: <pre lang="php" line="1"> <?php $a="我很好"; echo mb_convert_encoding ($a,UTF-8); ?> 可结果是: ??潞?潞? 现在的问题就是我如果把不同的字符串编码形式统一转换为utf-8,如果事先知道改变吗可以用iconv,但如果不知道该编码该怎么办呢? 问题3:iconv问题,如果转换的字符串,第一个字节的编码大于一定的数会返回空. 如: 复制代码 代码如下: <?php $str=chr(254)."测试ing".chr(254); $s = iconv("GB2312","UTF-8",$str); var_dump($s); ?> 返回 string(0) “” mb_convert_encoding的用法见官方: http://cn.php.net/manual/en/function.mb-convert-encoding.php PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似 。 下面还有一些详细的例子: 复制代码 代码如下: <?php $content = iconv("GBK", "UTF-8", $content); $content = mb_convert_encoding($content, "UTF-8", "GBK"); ?> 这个可以根据输入输出的字符编码进行转换 复制代码 代码如下: <?php 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, GBK, GB2312, BIG5); $encoded = mb_detect_encoding($data, $encode_array); $to = strtoupper($to); if($encoded != $to) { $data = mb_convert_encoding($data, $to, $encoded); } } return $data; } ?> |