前段时间,在做一个采集插件的时候,出现了一个问题。
浏览器网址后面带的get参数值含有中文的时候,在php里面获取字符串并且进行urlencode处理的时候,不同的浏览器,urlencode函数转换后的结果不一样。原来urlencode这个函数有2中编码方式,一种是gbk格式的编码,一种是utf-8格式的。并且这个格式居然不能再这个函数里面设置,导致这个结果不可控制,在不同浏览器环境下面结果不同,不能得到自己想要的格式编码。在搜索引擎里面找了很长时间,都没有找到解决这个问题的办法,没办法,只能自己手动解决。
经过努力终于解决了,把代码就发出来,供需要的人借鉴一下。
function urlencodegbk($key){需要gbk格式编码的urlencode可以用urlencodegbk函数,需要utf-8格式的urlencode可以用urlencodeutf8函数
$num = mb_strlen($key,"gbk");
$num1 = mb_strlen($key,"utf-8");
if($num > $num1){
$key = iconv("utf-8","gbk//ignore",$key);
}
return urlencode($key);
}
function urlencodeutf8($key){
$num = mb_strlen($key,"gbk");
$num1 = mb_strlen($key,"utf-8");
if($num <= $num1){
$key = iconv("gbk","utf-8//ignore",$key);
}
return urlencode($key);
}
$key=$_GET['key'];
$gbkkey = urlencodegbk($key);
$uf8key = urlencodeutf8($key);