客户端用Javascript的escape编码之后,php用什么才能解出来
rawurlencode是按字节进行处理的,并不管当前的文字编码是什么而js的unescape是按unicode编码进行的
所以你并不能得到正确的资料,除非rawurlencode的参数串为unicode编码的
因此你需要用php编程模拟js的动作
functionescape($str){
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
$ar=$r;
foreach($aras$k=>$v){
if(ord($v)<128)
$ar[$k]=rawurlencode($v);
else
$ar[$k]="%u".bin2hex(iconv("GB2312","UCS-2",$v));
}
returnjoin("",$ar);
}
functionunescape($str){
$str=rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r);
$ar=$r;
foreach($aras$k=>$v){
if(substr($v,0,2)=="%u")
$ar[$k]=iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
elseif(substr($v,0,3)=="&#x")
$ar[$k]=iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
elseif(substr($v,0,2)=="&#"){
$ar[$k]=iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
}
}
returnjoin("",$ar);
}
页:
[1]