php 检测字符编码代码
function utf8_gb2312( $str , $default = 'gb2312' ) { $str = preg_replace( "/[x01-x7f]+/" , "" , $str ); if ( empty empty ( $str )) return $default ; $preg = array ( "gb2312" => "/^([xa1-xf7][xa0-xfe])+$/" , //正则判断是否是gb2312 "utf-8" => "/^[x{4e00}-x{9fa5}]+$/u" , //正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了 ); if ( $default == 'gb2312' ) { $option = 'utf-8' ; } else { $option = 'gb2312' ; } if (!preg_match( $preg [ $default ], $str )) { return $option ; } $str = @iconv( $default , $option , $str ); //不能转成 $option, 说明原来的不是 $default if ( empty empty ( $str )) { return $option ; }默认编码是gb2312,而且我统计了一下,90%的情况下都是gb2312,所以,我的检测函数不能出现本来是gb2312的,结果被检测出utf8. 基本思路是:
1. 把所有的ascii去掉,如果全部都是ascii,那么就是gb2312。
3. 然后,用iconv 把字符串转换成utf8,如果转换不成功,那么原来可能不是真正的一个gb2312编码的字符(用正则匹配我已经尽量精确,但是,gb2312的编码不是连续的,还是会有空洞),那么最后的编码就是utf-8.
4. 否则就是gb2312 编码:加入这样的检查功能后,在1000个关键字里面,就出现了1个乱码,比以前的近100个关键字乱码少了很多。
查看更多关于php 检测字符编码代码 - php函数的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30763