看到别人的代码通过这个来匹配所有汉字
preg_match('/[\x7f-\xff]+/', $map)
[\x7f-\xff]+
是表示ascii表里面的127~255的多个字符是吗?但是那些字符都不是汉字啊,怎么放一起就变成汉字了呢?不明白,请教下大家。
ASCII码表 (0~255) http://www.douban.com/note/22078526/
又有朋友说是GBK码,我晕了,求大家给点详细说明介绍啥的。
看到别人的代码通过这个来匹配所有汉字
preg_match('/[\x7f-\xff]+/', $map)
[\x7f-\xff]+
是表示ascii表里面的127~255的多个字符是吗?但是那些字符都不是汉字啊,怎么放一起就变成汉字了呢?不明白,请教下大家。
ASCII码表 (0~255) http://www.douban.com/note/22078526/
又有朋友说是GBK码,我晕了,求大家给点详细说明介绍啥的。
GB2312(GBK)为了和 ASCII 兼容,使用了最高位为 1
的编码方式。
你给出的链接是扩展的 ASCII 码表,标准的 ASCII 码表共 127 个字符,01 - 7F。
0000 0001
0000 0010
...
...
...
0111 1111
而 GBK 为了不和 ASCII 混淆,使用最高位的 1
来编码,占 2 个字节。这样,当进行编码解析的时候就简单的,如果遇到
最高位如果是 0
那么就是 ASCII 码。
如果最高位是 1
那就在继续读取下一个字节。
0
,乱码。1
,则这两个字节对于一个汉字。因此,简单的匹配汉字的规则就是 [\x80-\xff]
。
给楼上更简洁地补充下
[\x80-\xff] 对应的是extended ASCII codes (character code 128-255)
能真正匹配汉字的是
preg_match_all('@\p{Han}@u','我艹',$m);
你确定匹配的规则是正确的?
应该是[\x80-\xff]+ 吧, 而且能这样匹配的应该是utf-8编码中的非ascii编码字符
简单说下,因为utf-8的字符,如果是非ascii编码的都是以1开头,具体来说就是10000000~1111111
具体参考链接:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html