function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
// $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
$ar[$k] = mb_convert_encoding(pack("H4",substr($v,-4)),"GBK","UCS-2");
}
elseif(substr($v,0,3) == "&#x"){
$ar[$k] = mb_convert_encoding(pack("H4",substr($v,3,-1)),"GBK","UCS-2");
//$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "&#") {
$ar[$k] = mb_convert_encoding(pack("n",substr($v,2,-1)),"GBK","UCS-2");
//$ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
?>
用iconv可能有中文的乱码问题 mb_convert_encoding对中文的支持比较好