Как предотвратить экранирование URL-адреса запроса URL-адреса Flash?

Я загружаю XML из сервлета из моего приложения Flex следующим образом:

_loader = new URLLoader();
_loader.load(new URLRequest(_servletURL+"?do=load&id="+_id));

Как вы понимаете, _servletURL - это что-то вроде http://foo.bar/path/to/servlet

В некоторых случаях этот URL-адрес содержит символы с диакритическими знаками (длинный рассказ). Я передаю строку unescaped в URLRequest, но кажется, что flash ускользает от нее и вызывает экранированный URL, который недействителен. Идеи?


person Peldi Guilizzoni    schedule 15.09.2008    source источник


Ответы (3)


Мой друг Луис понял это:

Вы должны использовать encodeURI для кодировки UTF8URL http://livedocs.adobe.com/flex/3/langref/package.html#encodeURI().

но не отменяет экранирование, потому что оно отменяет экранирование в ASCII, см. http://livedocs.adobe.com/flex/3/langref/package.html#unescape()

Я думаю, что именно здесь мы получаем% E9 в URL-адресе вместо ожидаемого% C3% A9.

http://www.w3schools.com/TAGS/ref_urlencode.asp

person Community    schedule 17.09.2008

Я не уверен, будет ли это иначе, но это более чистый способ достижения того же URLRequest:

var request:URLRequest = new URLRequest(_servletURL)
request.method = URLRequestMethod.GET;
var reqData:Object = new Object();

reqData.do = "load";
reqData.id = _id;
request.data = reqData;

_loader = new URLLoader(request); 
person grapefrukt    schedule 15.09.2008

Из Liveocs: http://livedocs.adobe.com/flex/3/langref/flash/net/URLRequest.html.

Создает объект URLRequest. Если System.useCodePage имеет значение true, запрос кодируется с использованием системной кодовой страницы, а не Unicode. Если System.useCodePage имеет значение false, запрос кодируется с использованием Unicode, а не системной кодовой страницы.

На этой странице есть дополнительная информация: http://livedocs.adobe.com/flex/3/html/help.html?content=18_Client_System_Environment_3.html

но в основном вам просто нужно добавить это в функцию, которая будет запускаться перед URLRequest (я бы, вероятно, поместил это в событие creationComplete)

System.useCodePage = false;

person Ryan Guill    schedule 15.09.2008
comment
Спасибо, но на той же странице говорится, что useCodePage по умолчанию ложен. В любом случае я поэкспериментирую - person Peldi Guilizzoni; 15.09.2008
comment
useCodePage - это своего рода взлом, поскольку он использует системную кодовую страницу, он может работать на машине на английском языке, но не работать на всех остальных. - person grapefrukt; 16.09.2008