php转换处理js的escape转义中文的函数

ajax提交中文时,有时经过 了escape转义,php并没有提供相应的函数进行解析,正面提供两种编码的解析方法:

GB2312编码:

function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/%u.{4}|.{4};|+;|.+/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)));
        }
    }
    return join("", $ar);
}

UTF8编码:

function unescape($str) {
    $ret = '';
    $len = strlen($str);
    for ($i = 0; $i < $len; $i++) {
        if ($str[$i] == '%' && $str[$i + 1] == 'u') {
            $val = hexdec(substr($str, $i + 2, 4));
            if ($val < 0x7f) $ret. = chr($val);
            else if ($val < 0x800) $ret. = chr(0xc0 | ($val >> 6)).chr(0x80 | ($val & 0x3f));
            else $ret. = chr(0xe0 | ($val >> 12)).chr(0x80 | (($val >> 6) & 0x3f)).chr(0x80 | ($val & 0x3f));
            $i += 5;
        } else if ($str[$i] == '%') {
            $ret. = urldecode(substr($str, $i, 3));
            $i += 2;
        } else $ret. = $str[$i];
    }
    return $ret;
}

 

发表评论

您的电子邮箱地址不会被公开。