在php编程中,当使用mb_detect_encoding函数进行编码识别时,经常会遇到识别编码有误的问题。
比如,对GB2312和UTF-8,或UTF-8和GBK(主要针对cp936的判断),有资料说是,当字符较短时,mb_detect_encoding判断会有误差。
例如:
以上代码实现:
检测字符串的编码是否UTF-8,是则转换为GBK。
可是当 $keytitle = “%D0%BE%C6%AC”;时。
检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。
可以用如下的方法解决之:
参数解释:
被检测的输入变量、编码方式的检测顺序(为真时后面自动忽略)、strict模式。
说明:
对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。
一般先检测gb2312,当有GBK和UTF-8时,需要将常用的放到前面。