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编码的。
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编码的。
if(strlen($s) == 2)
else{}
==3时候是utf-8的
直接通过$_GET("keyword") 出来的就已经是乱码了url的形式是:
GBK :search.php?keyword=%D6%D0%B9%FA
UTF8:search.php?keyword=%E4%B8%AD%E5%9B%BD怎么区分?
我现在想的是先urldecode 得到原始的 字符串
GBK的得到%D6%D0%B9%FA
UTF8的得到%E4%B8%AD%E5%9B%BDgbk的%XX 这种肯定是2的倍数个
utf8的%XX 这种肯定是3的倍数个如果是6的倍数的话就没法区分了,希望赐教
你能说的具体点吗?
用urldecode()出来的长度有啥不同的吗?
http://it.oyksoft.com/post/49/
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);
}
<?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));
?>