php获取字符串编码的函数mb_detect_encoding

发布时间:2020-12-14编辑:脚本学堂
本文介绍下,在php编程中,用于获取字符串编码的函数mb_detect_encoding的用法,有需要的朋友参考下。

php编程中,当使用mb_detect_encoding函数进行编码识别时,经常会遇到识别编码有误的问题。
比如,对GB2312和UTF-8,或UTF-8和GBK(主要针对cp936的判断),有资料说是,当字符较短时,mb_detect_encoding判断会有误差。
例如:
 

复制代码 代码示例:
<?
/**
* 字符串编码函数 mb_detect_encoding
* edit by www.jb200.com
*/
$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其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。

可以用如下的方法解决之:
 

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

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

说明:
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。
一般先检测gb2312,当有GBK和UTF-8时,需要将常用的放到前面。