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")。

  • 相关阅读:
    Oracle11gR2下PL/SQL访问网络的错误ORA24247
    安装cx_Oracle
    搭建基于FreeNAS的共享存储
    unique constraint 和 unique index 的关系
    Oracle11gR2_RAC全静默安装攻略
    struts中的constant详解 (转载)
    网摘
    用 Google 的 FaceNet 做人脸识别极客帮课程笔记
    【Linux】Git 安装最新版
    【Jmeter】性能测试EMQ X 压测
  • 原文地址:https://www.cnblogs.com/thinksasa/p/3145132.html
Copyright © 2011-2022 走看看