php中文转换编码函数

   $filename= $list->filename;                 // 获取文件名字
        if(preg_match("/[\x80-\xff]/",$filename)){  // 如果是中文,将其转码
            $fileName=iconv("utf-8","gb2312",$filename);
        }else{
            $fileName = $filename;                  // 否则保存原文件名
        }

 

GB2312(GBK)为了和 ASCII 兼容,使用了最高位为 1 的编码方式。

你给出的链接是扩展的 ASCII 码表,标准的 ASCII 码表共 127 个字符,01 - 7F。

0000 0001
0000 0010
...
...
...
0111 1111

而 GBK 为了不和 ASCII 混淆,使用最高位的 1 来编码,占 2 个字节。这样,当进行编码解析的时候就简单的,如果遇到

  1. 最高位如果是 0 那么就是 ASCII 码。

  2. 如果最高位是 1 那就在继续读取下一个字节。

    1. 如果下一个字节最高位是 0,乱码。
    2. 如果下一个字节最高位是 1,则这两个字节对于一个汉字。

因此,简单的匹配汉字的规则就是 [\x80-\xff]

posted @ 2016-11-22 18:06  Chrdai  阅读(337)  评论(0编辑  收藏  举报