分类: 系统运维
2010-06-17 15:53:17
$str=$_GET["yourdata"]; //escape过的中文数据 $str = rawurldecode($str); preg_match_all("/%u.{4}|.{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))); elseif(substr($v,0,3) == "") $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))); } $result = join("",$ar); //unescape的中文数据 |
function phpUnescape($escstr) { preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/", $escstr, $matches); //prt($matches); $ar = &$matches[0]; $c = ""; foreach ($ar as $val) { if (substr($val, 0, 1) != "%") { //如果是字母数字+-_.的ascii码 $c .= $val; } elseif(substr($val, 1, 1) != "u") { //如果是非字母数字+-_.的scii码 $x = hexdec(substr($val, 1, 2)); $c .= chr($x); } else { //如果是大于0xFF的码 $val = intval(substr($val, 2), 16); if ($val < 0x7F) { // 0000-007F $c .= chr($val); } elseif ($val < 0x800) { // 0080-0800 $c .= chr(0xC0 | ($val / 64)); $c .= chr(0x80 | ($val % 64)); } else { // 0800-FFFF $c .= chr(0xE0 | (($val / 64) / 64)); $c .= chr(0x80 | (($val / 64) % 64)); $c .= chr(0x80 | ($val % 64)); } } } return $c; } |