使用 PHP 解析 javascript escape() 编码过的字串

PHP 跟 Javascript 都有 HTML encoding 的函式,编码过的结果虽然类似,但是还是有些微的不同,所以不能互转。
二者的差异可以可参考:
http://php.weblogs.com/php_jscript_vbscript_1
节录如下:
PHP:
urlencode( ) All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.
urldecode( )All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.
Javascript:
Javascript(str) All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding
那要如何用 PHP 来读取 escape() 编码过的字符串呢?
可以用以下的方式来读取 (范例为 Unicode 解译为 big5)
修改自:http://vivian.stripper.jp/index.php?itemid=100
$str = uniDecode($str,'big-5'); function uniDecode($str,$charcode){


 $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/",toUtf8,$str);


 return mb_convert_encoding($text, $charcode, 'utf-8');


}


function toUtf8($ar){


 foreach($ar as $val){


    $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;


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值