php专区

 首页 > php专区 > PHP应用 > php函数大全 > php 检测字符编码代码 - php函数

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

分享到:
【字体:
导读:
          默认编码是gb2312,而且我统计了一下,90%的情况下都是gb2312,所以,我的检测函数不能出现本来是gb2312的,结果被检测出utf8 基本思路是:...

php 检测字符编码代码

  1. function utf8_gb2312($str$default = 'gb2312'
  2.     $str = preg_replace("/[x01-x7f]+/"""$str); 
  3.     if (emptyempty($str)) return $default
  4.      
  5.     $preg =  array
  6.         "gb2312" => "/^([xa1-xf7][xa0-xfe])+$/"//正则判断是否是gb2312 
  7.         "utf-8" => "/^[x{4e00}-x{9fa5}]+$/u",      //正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了 
  8.     ); 
  9.     if ($default == 'gb2312') { 
  10.         $option = 'utf-8'
  11.     } else { 
  12.         $option = 'gb2312'
  13.     } 
  14.     if (!preg_match($preg[$default], $str)) { 
  15.         return $option
  16.     } 
  17.     $str = @iconv($default$option$str); 
  18.      
  19.     //不能转成 $option, 说明原来的不是 $default 
  20.     if (emptyempty($str)) { 
  21.         return $option
  22.     } 

默认编码是gb2312,而且我统计了一下,90%的情况下都是gb2312,所以,我的检测函数不能出现本来是gb2312的,结果被检测出utf8. 基本思路是:

1. 把所有的ascii去掉,如果全部都是ascii,那么就是gb2312。

2. 假设这个字符串是gb2312,用一个正则检查它是否是真的gb2312,如果不是,那么就是utf-8

3. 然后,用iconv 把字符串转换成utf8,如果转换不成功,那么原来可能不是真正的一个gb2312编码的字符(用正则匹配我已经尽量精确,但是,gb2312的编码不是连续的,还是会有空洞),那么最后的编码就是utf-8.

4. 否则就是gb2312 编码:加入这样的检查功能后,在1000个关键字里面,就出现了1个乱码,比以前的近100个关键字乱码少了很多。

分享到:
php mb_strlen()中英混体字符截取代码 - ...
php mb_strlen()中英混体字符截取代码 如果在用mb_strlen出现fatal error: call to undefined function mb_strlen,这种问题你要可以用php info()看一下有没有装载mbstring,如果没有,尝试将php_mbstring.dll复制到windows目录下。 文件编码 utf-8 $var = '中文字符abc';...
php hexdec()与dechex()十六进制转换为十...
php hexdec()与dechex()十六进制转换为十进制互换 hexdec() 函数把十六进制转换为十进制。 语法:hexdec(hex_string) echo hexdec('77');    //输出119  echo "";  echo hexdec(dechex(43));   //输出43  echo "";  echo hexdec('3a');...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……