好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php 检测字符编码代码 - php函数

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函数的详细内容...

  阅读:46次