php程序接受一个keyword参数如下所示
search.php?keyword=XXX的形式由于之前我在页面上写的关键词为中文形式 比如search.php?keyword=中国,百度在收录页面时候会把中国GBK编码成%D6%D0%B9%FA对应收录的url为search.php?keyword=%D6%D0%B9%FA 我的网站也是gb2312编码的,能够正确获得结果,但是Google在收录的时候却把中国用UTF8编码成%E4%B8%AD%E5%9B%BD,对应收录的url为search.php?keyword%E4%B8%AD%E5%9B%BD,当通过这样的url来到我的网站时候,我不能得到正常的关键词。请问我有没有办法知道%E4%B8%AD%E5%9B%BD是UTF的编码,然后我做相应的转换,而%D6%D0%B9%FA则不需要转换,直接获取参数,这样区分对待呢?另外Google也有部分收录的页面是正常的,不知道为什么会出现有些是gbk编码有些是utf8编码的。

解决方案 »

  1.   

    $s = '你好';
    if(strlen($s) == 2)
    else{}
      

  2.   

    ==2的时候是gbk
    ==3时候是utf-8的
      

  3.   


    直接通过$_GET("keyword") 出来的就已经是乱码了url的形式是:
    GBK :search.php?keyword=%D6%D0%B9%FA 
    UTF8:search.php?keyword=%E4%B8%AD%E5%9B%BD怎么区分?
      

  4.   


    我现在想的是先urldecode 得到原始的 字符串
    GBK的得到%D6%D0%B9%FA
    UTF8的得到%E4%B8%AD%E5%9B%BDgbk的%XX  这种肯定是2的倍数个
    utf8的%XX 这种肯定是3的倍数个如果是6的倍数的话就没法区分了,希望赐教
      

  5.   

    用urldecode()出来的在判断长度
      

  6.   


    你能说的具体点吗?
    用urldecode()出来的长度有啥不同的吗?
      

  7.   

    你先看看这个
    http://it.oyksoft.com/post/49/
      

  8.   

    手册中有这样一个判断是否utf-8编码的函数
    function detectUTF8($string)
    {
           return preg_match('%(?:
           [\xC2-\xDF][\x80-\xBF]        # non-overlong 2-byte
           |\xE0[\xA0-\xBF][\x80-\xBF]              # excluding overlongs
           |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}      # straight 3-byte
           |\xED[\x80-\x9F][\x80-\xBF]              # excluding surrogates
           |\xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
           |[\xF1-\xF3][\x80-\xBF]{3}                  # planes 4-15
           |\xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
           )+%xs', $string);
    }
      

  9.   

    好了,就这样
    <?php
    function is_utf8($word){ 
    if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true) { 
    return true; 
    } else { 
    return false; 
    }
    }
    //GBK的得到%D6%D0%B9%FA
    //UTF8的得到%E4%B8%AD%E5%9B%BD
    $s1 = urldecode('%D6%D0%B9%FA');
    $s2 = urldecode('%E4%B8%AD%E5%9B%BD');
    var_dump(is_utf8($s2));
    ?>
      

  10.   

    谢谢楼上2为。is_utf8这个函数目前测试是没问题的,非常感谢