<?php 
先unescapefunction unescape($str) { 
$str = rawurldecode($str); 
preg_match_all("/(?:%u.{4}) &brvbar;.+/",$str,$r); 
$ar = $r[0]; 
foreach($ar as $k=>$v) { 
if(substr($v,0,2) == "%u" && strlen($v) == 6) 
$ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4))); 

return join("",$ar); 

?>

解决方案 »

  1.   

    ice_berg16的方法在google上也有人提过,但本人总觉得这样解决并非是最理想的方案(如果遇到复杂的html编码,这样做会不会有遗漏呢,而且如果传送的数据量很大那么unescape函数就会浪费很多资源)。为什么发送给asp的时候可以自动解释escape后的字符串,而php却不能呢?有没有更好一点的解决方案?继续
      

  2.   

    真够经典的,问题的原因是你不了解js
    用 encodeURIComponent 函数编码,而不是用 escape 函数encodeURIComponent 函数是将传入的参数转换成utf-8编码以后再做URL编码,可以在服务器端自动完成URL解码。注意URL解码后的是utf-8编码的串,需要自行完成到所需编码的转换
    escape 函数是将传入的参数转换成unicode编码以后再做URL编码,在服务器端一般不能全部完成URL解码。参数中的汉字将以%uhhhh的形式出现,处理上稍嫌麻烦
      

  3.   

    进来一看,我就想起了唠叨老大以前写的那两个php版的:escape和unescape
      

  4.   

    感谢xuzuning,确实长见识,不过能否说说escape 编码转送给asp端,怎么就可以自动完成URL解码呢?回答完给你分
      

  5.   

    原本 escape 函数只是忠实的对传入内容进行url编码,并不强制进行编码转换。但是在微软推出unicode编码标准以后,ie中的escape函数就要进行任意编码——unicode编码的转换了。对于微软的iis,也只在服务器端语言为vbs的时候可以识别unicode编码