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

  • 相关阅读:
    ARM标准汇编与GNU汇编
    使用友元,编译出错fatal error C1001: INTERNAL COMPILER ERROR (compiler file 'msc1.cpp', line 1786) 的解决
    C++中值传递,引用传递,指针传递
    C++命名空间的用法
    关于初始化C++类成员
    vivi的配置与编译
    C++ 容器
    vivi分区问题,及移植时需要修改的地方(转)
    基于S3C2410的VIVI移植
    拷贝构造函数什么时候调用?
  • 原文地址:https://www.cnblogs.com/thinksasa/p/3145132.html
Copyright © 2011-2022 走看看