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]

原文地址:https://www.cnblogs.com/chrdai/p/6090336.html