PHP如何读取Javascript escape后的字符串
PHP 跟 Javascript 都有 HTML encoding 的函式,编码过的结果虽然类似,但是还是有些微的不同,所以不能互转。二者的差异可以可参考,节录如下:
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() 编码过的字符串呢?
可以用php模拟js的动作
function escape($str) {
preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v){
if(ord($v[0]) < 128)
$ar[$k] = rawurlencode($v);
else
$ar[$k] = "%u".bin2hex(iconv("GBK","UCS-2",$v));
}
return join("",$ar);
}
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)));
elseif(substr($v,0,3) == "&#x")
$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);
}
原创文章如转载,请注明:转载自蓝色骑兵 [ http://www.wkeke.cn/ ] 本文链接地址:http://www.wkeke.cn/archives/php-javascript-escape/
相关文章
2 个牛人指点过:
请牛人赐教:

支持一下。占个位置
很多不错的建议!