zoukankan      html  css  js  c++  java
  • 中文字符相关问题

    编码综述:

         php并不是采用什么编码的问题, 而是你要输出的编码问题你把php写成u8/gb2312它都可以正常使用, 区别在于, 在chr里得到的是什么, chr虽然可以返回一个编码大于127的字符, 但是这并不意味着php可以正常解析u8/gb2312, 一个汉字在GB2312中由两个字节组成, 也就是FFFF, 而在u8里是FFFFFF, 而chr只拿到了第一个FF, 也就是255, 它并不能直接得到任何汉字的直接编码而实际上ASCII和GB2312是兼容的, 这也是为什么chr可以正常取值的原因, 因为chr并不是为了可录入的字符串取值的, 它可以安全用于任何的二进制编码, 包括图像文件给你个例子你看看echo ord('我');这里只能返回230, 我是以u8保存的文件并输出的, 它得到的只有230, 而230转换成hex是E6,实际上u8中我的编码是E68891, 这样你就明白了吧, 其实它只拿到了第一个字节echo chr(0xE6).chr(0x88).chr(0x91);这里例子可以在u8的情况下输出我这个汉字, 你看到了, 这里用了3次chr才得到这个汉字。

    1.匹配出中文字符
    案例:(文件编码为gbk)

    <?php
    $str = "你好,hel哈哈lo";
    $dd=preg_match_all('/[x80-xff]./',$str,$match);
    var_dump($match);
    ?>

    输出:array(1) { [0]=> array(4) { [0]=> string(2) "你" [1]=> string(2) "好" [2]=> string(2) "哈" [3]=> string(2) "哈" } }
    注解:1.因为gbk的中文是单字节存在,所以如果文件编码使用gbk,那么可以用[x80-xff].来匹配;
            2.因为unicode是双字节形式存在,所以如果文件编码为unicode,那么就要用'/[x{4e00}-x{9fff}]/u'来匹配(使用4位16进制时必须要加"{}"和模式修正符"u")。

  • 相关阅读:
    MongoDB + Spark: 完整的大数据解决方案
    07对象字面量
    05JavaScript中数组的使用
    04JavaScript中函数也是对象
    03JavaScript中的函数预解析
    02通过arguments实现方法重载
    01函数重名问题
    mxGraph 学习笔记 --mxGraph常用功能代码
    mxGraph学习笔记--设置节点鼠标事件
    mxGraph 学习笔记 --右键菜单
  • 原文地址:https://www.cnblogs.com/thinksasa/p/3145132.html
Copyright © 2011-2022 走看看