js的escape如何在PHP中来解呢?
下面的这个函数可以正确的解析,网上有不少unescape的函数,但好用的不多.
这是很久以前收集的一个,不知道谁写的了,但经过测试没有问题~
JavaScript代码
01
.
function
phpUnescape($escstr)
02 .{
03 . preg_match_all( " /%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/ " , $escstr, $matches);
04 . $ar = & $matches[ 0 ];
05 . $c = "" ;
06 . foreach($ar as $val)
07 . {
08 . if (substr($val, 0 , 1 ) != " % " )
09 . {
10 . $c . = $val;
11 . } elseif (substr($val, 1 , 1 ) != " u " )
12 . {
13 . $x = hexdec(substr($val, 1 , 2 ));
14 . $c . = chr($x);
15 . }
16 . else
17 . {
18 . $val = intval(substr($val, 2 ), 16 );
19 . if ($val < 0x7F ) // 0000-007F
20 . {
21 . $c . = chr($val);
22 . } elseif ($val < 0x800 ) // 0080-0800
23 . {
24 . $c . = chr( 0xC0 | ($val / 64 ));
25 . $c . = chr( 0x80 | ($val % 64 ));
26 . }
27 . else // 0800-FFFF
28 . {
29 . $c . = chr( 0xE0 | (($val / 64 ) / 64 ));
30 . $c . = chr( 0x80 | (($val / 64 ) % 64 ));
31 . $c . = chr( 0x80 | ($val % 64 ));
32 . }
33 . }
34 . }
35 .
36 . return $c;
37 .}
02 .{
03 . preg_match_all( " /%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/ " , $escstr, $matches);
04 . $ar = & $matches[ 0 ];
05 . $c = "" ;
06 . foreach($ar as $val)
07 . {
08 . if (substr($val, 0 , 1 ) != " % " )
09 . {
10 . $c . = $val;
11 . } elseif (substr($val, 1 , 1 ) != " u " )
12 . {
13 . $x = hexdec(substr($val, 1 , 2 ));
14 . $c . = chr($x);
15 . }
16 . else
17 . {
18 . $val = intval(substr($val, 2 ), 16 );
19 . if ($val < 0x7F ) // 0000-007F
20 . {
21 . $c . = chr($val);
22 . } elseif ($val < 0x800 ) // 0080-0800
23 . {
24 . $c . = chr( 0xC0 | ($val / 64 ));
25 . $c . = chr( 0x80 | ($val % 64 ));
26 . }
27 . else // 0800-FFFF
28 . {
29 . $c . = chr( 0xE0 | (($val / 64 ) / 64 ));
30 . $c . = chr( 0x80 | (($val / 64 ) % 64 ));
31 . $c . = chr( 0x80 | ($val % 64 ));
32 . }
33 . }
34 . }
35 .
36 . return $c;
37 .}
escape编码后:
%u6D4B%u8BD5www.koyoz.com%22%22%27%27%3C%3E%26%26
解码后:
测试www.koyoz.com""''<>&&