PHP的urldecode与AS3的unescape之间的区别?

问题描述 投票:-1回答:1

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的文档都没有列出将哪些字符编码成什么。

php actionscript-3 urlencode urldecode
1个回答
0
投票
**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

© www.soinside.com 2019 - 2024. All rights reserved.