加入收藏 | 设为首页 | 会员中心 | 我要投稿 盐城站长网 (https://www.0515zz.cn/)- 运维、云管理、管理运维、智能数字人、AI硬件!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 检测字符编码代码

发布时间:2022-06-20 08:47:31 所属栏目:PHP教程 来源:互联网
导读:function utf8_gb2312($str, $default = gb2312) { $str = preg_replace(/[x01-x7f]+/, , $str); if (emptyempty($str)) return $default; $preg = array( gb2312 = /^([xa1-xf7][xa0-xfe])+$/, //正则判断是否是gb2312 utf-8 = /^[x{4e00}-x{9fa5}]+$/u, //
  function utf8_gb2312($str, $default = 'gb2312')
  {
      $str = preg_replace("/[x01-x7f]+/", "", $str);
      if (emptyempty($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 (emptyempty($str)) {
          return $option;
      }
  默认编码是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个关键字乱码少了很多。
 
 

(编辑:盐城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读