Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 php 检测字符编码代码

php 检测字符编码代码

发布时间:2019-03-12   编辑:www.jquerycn.cn
jquery中文网为您提供php 检测字符编码代码等资源,欢迎您收藏本站,我们将为您提供最新的php 检测字符编码代码资源
<script>ec(2);</script>
<blockquote>

function utf8_gb2312($str, $default = 'gb2312')
{
    $str = preg_replace("/[x01-x7f] /", "", $str);
    if (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($str)) {
        return $option;
    }

</blockquote>

默认编码是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 自动检测内容编码并转换的代码
php改变编码的函数iconv
php mb_detect_encoding检测字符串编码有误的问题
有关 UTF-8 BOM 导致样式错乱的解决方法
php编码转换函数(自动转换字符集支持数组转换)
有关UTF-8 编码中BOM的检测与删除
php中使用addslashes函数报错的问题
一个判断是否为指定长度内字符串的函数
php写的用来检测手机邮箱用户名的类
php防止SQL注入的函数

[关闭]