AS3: используйте символ подчеркивания в имени переменной URLVariables - PullRequest
1 голос
/ 09 января 2012

Можно ли использовать символ подчеркивания в имени переменной URLVariables?Например, следующий код выводит «my% 5Fusername = foo» вместо «my_username = foo».

import flash.net.URLVariables;
var variables : URLVariables = new URLVariables("my_username=foo");  
trace(variables.toString());

Как и в трассировке, «% 5F» отображается вместо подчеркивания взапрос.Есть ли какой-нибудь способ, которым я могу получить знак подчеркивания вместо этого?

Ответы [ 3 ]

1 голос
/ 09 января 2012

Используя регулярное выражение , вы можете преобразовать вывод в подчеркивание. Этот метод использует факты, которые:

  1. URLRequest data переменная является универсальной Object
  2. String является Object
  3. выходные данные toString() и replace() являются String объектами 3.

код:

var url:String = "http://www.[yourDomain].com/test";
var request:URLRequest = new URLRequest(url);
var variables:URLVariables = new URLVariables("my_user_name=f_o_o");

// add some more variables:
variables.exampleSessionId = "test";
variables.example_Session_Id2 = "test2";

// set up the search expression:
var undPatrn:RegExp = /%5f/gi;

trace("Without '_': " + variables.toString());  
trace("With '_': " + variables.toString().replace(undPatrn, "_"));  
trace(variables);  

// navigate with %5f:    
request.data = variables.toString();
navigateToURL(request);

// navigate with underscore:    
request.data = variables.toString().replace(undPatrn, "_");
navigateToURL(request);
1 голос
/ 09 января 2012

Просто не используйте класс URLVariables, как известно, другие тоже делают неправильно. Этот URL RFC вызывает подчеркивание специальным символом и помещает его в ту же категорию, что и буквенно-цифровая, говоря, что кодировка не требуется. Этот RFC вызывает часть, в которой у вас есть переменные, как "запрос" и выделяет для нее pchar, описывая pchar как содержащий символ подчеркивания.

На практике URI, содержащий символы подчеркивания, не создает проблем для браузеров или серверов, поэтому просто неправильно кодировать его.

РЕДАКТИРОВАТЬ: из дальнейшего прочтения это выглядит скорее так, что это скорее нежелательное поведение, чем ошибка (нормализатор URI будет знать, чтобы вернуть закодированное подчеркивание к его первоначальному виду), тем не менее, подчеркивание кодирования такое же, как и кодирование букв английского алфавита - расточительно и глупо.

0 голосов
/ 09 января 2012

trace(unescape(variables.toString()));

...