louyaoluan 发表于 2017-4-13 12:09:45

客户端用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]
查看完整版本: 客户端用Javascript的escape编码之后,php用什么才能解出来