php mb_detect_encoding判断字符串编码方法
在php中利用mb_detect_encoding可以判断给我们的字符是那个类型的编码了,从而我们就可以利用inconv进行字符转换了,下面给大家介绍几个例子.
例子,利用mb_detect_encoding()判断字符是否为uft-8编码,代码如下:
$encode = mb_detect_encoding( $q , array ( 'GB2312' , 'GBK' , 'UTF-8' )); echo $encode . "<br/>" ; if ( $encode == "GB2312" ) { $q = iconv( "GBK" , "UTF-8" , $q ); } else if ( $encode == "GBK" ) { $q = iconv( "GBK" , "UTF-8" , $q ); } else if ( $encode == "EUC-CN" ) { $q = iconv( "GBK" , "UTF-8" , $q ); } else //CP936 { //$q = iconv("GB2312","UTF-8",$q); }可是 mb_detect_encoding 存在一个硬伤,经常出现判断不准确的情况,或许这样就可以解决,代码如下:
// 使用 iconv 转换并判断是否等值,效率不高 function is_utf8 ( $str ) { if ( $str === iconv( 'UTF-8' , 'UTF-8//IGNORE' , $str )) { return 'UTF-8' ; } } // 多种编码的情况 function detect_encoding ( $str ) { foreach ( array ( 'GBK' , 'UTF-8' ) as $v ) { if ( $str === iconv( $v , $v . '//IGNORE' , $str )) { return $v ; } } }通过以上方式得到字符串编码信息后,就可以利用 iconv 或 mb_convert_encoding 来转换编码了.
问题: 可是当 $keytitle = '%D0%BE%C6%AC'; 时,检测结果却是UTF-8,这其实不算是bug,我们不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大.
解决方法,代码如下:
$encode = mb_detect_encoding($keytitle, array('ASCII','GB2312′,'GBK’,'UTF-8');
查看更多关于php mb_detect_encoding判断字符串编码方法 - php函数的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30914