Home > php教程 > php手册 > php 检测字符编码代码

php 检测字符编码代码

WBOY
Release: 2016-06-13 09:55:05
Original
1032 people have browsed it

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;
    }

默认编码是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个关键字乱码少了很多。

 

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template