php mb_detect_encoding检测字符串编码有误的问题

发布时间:2019-11-01编辑:脚本学堂
php mb_detect_encoding函数进行字符串编码时,有时会出现编码有误的问题,比如对GB2312和UTF-8,或UTF-8和GBK(主要是cp936的判断)。

当字符短较短时,mb_detect_encoding会出现误判的情况发生,有遇到此问题的朋友,可以参考下本文的解决方法。

例如:
 

复制代码 代码示例:
<?php
$encode = mb_detect_encoding($keytitle, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
if ($encode == “UTF-8″){
 $keytitle = iconv("UTF-8″,"GBK",$keytitle);
}
 

检测字符串的编码是否UTF-8,是的话就则转换为GBK。
可是当 $keytitle  = '%D0%BE%C6%AC'; 时。
检测结果却是UTF-8,这其实不算是bug,我们不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。

解决方法:
 

复制代码 代码示例:
$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK’,'UTF-8');

参数解释:
被检测的输入变量
编码方式的检测顺序(为真时自动忽略后面的)
strict模式

适时调整编码检测的顺序,将最大可能性放在前面,可以减少转换出错的机会。
好的习惯是:当有GBK和UTF-8时,先排gb2312,即将最常用的安排在前面。