1

是否可以在 URLVariables 变量名中使用下划线字符?例如,以下代码输出“my%5Fusername=foo”而不是“my_username=foo”。

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

就像在跟踪中一样,“%5F”显示在请求中而不是下划线。有什么方法可以让下划线字符出现吗?

4

3 回答 3

1

使用正则表达式,您可以将输出转换为下划线。这种方法利用了以下事实:

  1. URLRequestdata变量是泛型的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);
于 2012-01-09T05:58:16.923 回答
1

简单地不要使用 URLVariables 类,它也会做其他错误的事情。 此 URL RFC将下划线称为特殊字符,并将其与字母数字归为同一类别,表示不需要编码。该 RFC将您拥有变量的部分称为“查询”并将 pchar 分配给它,将 pchar 描述为包含下划线字符。

实际上,包含下划线字符的 URI 似乎不会给浏览器或服务器带来问题,因此对其进行编码是完全错误的。

编辑:从进一步阅读来看,这看起来更像是一种不受欢迎的行为,然后是一个错误(URI 规范化器会知道将编码的下划线恢复为其原始外观),但编码下划线与编码英文字母的字母相同- 浪费和愚蠢。

于 2012-01-09T06:33:27.677 回答
0

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

于 2012-01-09T05:29:25.843 回答