PHP使用urlencode和urldecode,而Actionscript 3使用转义和unescape将字符串编码和解码为URL安全格式,但是问题在于它们显然并不完全相同。当我尝试在PHP中的字符串上使用urlencode然后在AS3中取消转义,或者在AS3中转义并在PHP中使用urldecode时,这有时会给我带来问题。有谁知道确切的区别是什么?我发现this post列出了以下差异:
**PHP urlencode**
á=%E1
é=%E9
í=%ED
ñ=%F1
**AS3 escape**
á=%C3%A1
é=%C3%A9
í=%C3%AD
ñ=%C3%B1
还有更多区别吗? PHP的官方文档或AS3的文档都没有列出将哪些字符编码成什么。
**AS3**
for (var i:uint=0; i<=255; i++) {
var s:String = String.fromCharCode(i);
trace(i + ": " + escape(s));
}
**PHP**
for ($i=0; $i<=255; $i++) {
$s = chr($i);
echo $i . ': ' . urlencode($s);
echo "\n";
}
比较输出之后,存在以下差异:
char code 32 ( )
AS3 escape: %20
PHP urlencode: +
char code 42 (*)
AS3 escape: *
PHP urlencode: %2A
char code 43 (+)
AS3 escape: +
PHP urlencode: %2B
char code 47 (/)
AS3 escape: /
PHP urlencode: %2F
char code 64 (@)
AS3 escape: @
PHP urlencode: %40
PHP也具有rawurlencode
,它将空格转换为%20而不是+号,但是所有其他差异仍然存在。除了字符代码255,AS3在事物之前添加了一个额外的%u01,这在urlencode中不存在。
另外,似乎AS3确实有一种以PHP期望的方式对URL进行编码的方法,但您只是无法正常访问它。
var symbols:String = " *+/@"; var vars:URLVariables = new URLVariables(); vars.param1 = symbols; trace(vars.toString()); // param1=%20%2A%2B%2F%40 <--- This is the same as PHP trace(escape(symbols)); // %20*+/@ but not this trace(encodeURI(symbols)); // %20*+/@ or this trace(encodeURIComponent(symbols)); // %20*%2B%2F%40 or this