Я провел некоторое тестирование, и различия существенны, даже для кодов символов от 0 до 255. Вот мой тестовый код:
**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 действительно имеет способ кодирования URL таким же образом, как PHP ожидает, но вы просто не можете получить к нему доступ нормально.
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