刚才在网上下了一段统计中文字符个数的代码如下:
function length($str){//可以统计中文字符
$len=strlen($str);
$i=0;
while($i<$len){
if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i])){
$i+=2;
}else{
$i+=1;
}
$n+=1;
}
请问其中的chr(0xa1),chr(0xff)代表什么意思啊/
我用echo chr(0xa1)和echo chr(0xff)输出都是空啊?请指教:

解决方案 »

  1.   

    chr(0xa1)."-".chr(0xff).意思是,所有中文
      

  2.   

    ox打头表示这是一个十六进制数
    0xa1 ==> 161
    0xff= ==> 255
    chr()函数返回相对应于 ascii 所指定的单个字符chr(0xa1)."-".chr(0xff) 表示全部gb2312字符
    注意:这可不是全部汉字
      

  3.   

    那小写字母z的ascii码是122(也就是说除了汉字字母和汉字最大的也就是122)了.
    又因为0x76的ascii码是118所以可不可以把chr(0xa1)."-".chr(0xff) 表示全部gb2312字符
    改成chr(0x76)."-".chr(0xff) 表示全部gb2312字符
      

  4.   

    还有这两个相对立的函数怎么配合不好呢如下:
    echo ord("是");
    echo "<br>";
    echo chr(202);
    其中chr(202)什么也输不出来
      

  5.   

    LZ可以放弃这段代码了,因为它是错的
    gb2312的汉字是从8140-fea0
    所以从a1开始检测只能检测常用汉字既然用到正则,为何不用unicode检查呢?
      

  6.   

    这个判断只能针对特定的的编码类型.如果是utf-8编码,汉字占3字节.他的$i+=2就要改成$i+=3了
      

  7.   

    preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i])这个就是判断一下是不是中文