它是按照chr函数出来的ASCII码进行判断,具体为什么,要研究了ASCII码的规律才知道。(个人推测是这样)

解决方案 »

  1.   

    $p*256 + $q - 65536; 65536==256*256,也就是2的16次方,总共有2个bytes$p和$q最大是255,最小是0,所以范围是256$p*256,相当于把$p存储在那两个bytes的高位。而$q,则存储在$bytes的低位。GBK一个字符是2bytes,$p在这里,就高位的byte,而$q就是低位的。-65536,它这里有点故弄玄虚的意味。如果我把上面的数据改成+,那么就不需要-65536了。当然代码也要随之改变一下。1)它这个算法效率很低。如果是我,我会用个二分法来查询。
    2)他的代码有很多多余的地方,例如在getChineseSpell函数的foreach循环里,$result按他这样写就得赋值很多次了。
      

  2.   

    他的$chineseSpellList是一个拼音对应编码的数组。这个编码是根据GBK的前后两个bytes相加而来的。如果没有那个数组,单纯通过数字是无法获得拼音的。
      

  3.   

    那是不是就是说
    php对汉字的编码,是按照拼音排列的?这样就能准确的通过计算得出他的位置
      

  4.   

    按照surfchen的说法,应该是这样。但不是php对汉字的编码,而是ASCII的编码。
      

  5.   

    应有相关库,即汉字对应拼音
    每个汉字对应一个拼音,多对一'a'=>-20319,
        'ai'=>-20317,
        'an'=>-20304,
        'ang'=>-20295,
      

  6.   

    拼音1=>汉字编码1
    拼音2=>汉子编码2这里汉字编码的意思,是这样的:1)你应该知道,GB2312里,汉字是由两个bytes组成。
    2)你还应该知道,一个bytes就是8个bits,可以表示256种可能。例如,它可以表示十进制的0到255.
    2)假设某个字“X”,它的第一个bytes是167,第二个bytes是180。那么,该汉字X的编码就是167*256+180-256*256需要注意的是,我这里所说的汉字编码,并非一种标准的编码,只是我们几个在这个帖子里对那个程序所用的编码方式的一种称呼。
      

  7.   

    嘿嘿, 这个算法的根据是gb2312编码 中 的 第一级汉字的确是按拼音排列的所以用这个条件排除了其它符号和二级汉字: ($num <-20319||$num>-10247)
    其它的楼上都解释了