Actionscript 3 AS3:在URL变量名称中使用下划线字符

Actionscript 3 AS3:在URL变量名称中使用下划线字符,actionscript-3,urlvariables,Actionscript 3,Urlvariables,是否可以在URL变量名中使用下划线字符?例如,下面的代码输出“my%5Fusername=foo”而不是“my_username=foo” 与跟踪中一样,请求中会显示“%5F”而不是下划线。有没有办法让下划线字符显示出来?trace(unescape(variables.toString())使用,可以将输出转换为下划线。该方法利用了以下事实: URLRequest的数据变量是一个通用的对象 字符串是一个对象 toString()和replace()的输出是String对象3 守则: var u

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

与跟踪中一样,请求中会显示“%5F”而不是下划线。有没有办法让下划线字符显示出来?

trace(unescape(variables.toString())

使用,可以将输出转换为下划线。该方法利用了以下事实:

  • URLRequest
    数据
    变量是一个通用的
    对象
  • 字符串
    是一个
    对象
  • 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);
    

    简单地说,不要使用URLVariables类,它也会做其他错误的事情。将下划线称为特殊字符,并将其与字母数字放在同一类别中,表示不需要编码。调用变量为“query”的部分,并将pchar分配给它,将pchar描述为包含下划线字符

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


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

    如果@Anonymous1试图在URL中使用
    变量
    ,但只是取回下划线字符,
    unescape()
    是不正确的。它还可以将空格、符号、百分比等转换回ASCII。这些将使URL无效。由于下划线是的一部分,因此允许对其进行转换,任何转换都应仅限于下划线字符。@iND:他没有在变量名中使用其他字符,只使用下划线。OP说他想用下划线而不是转义/编码的字符来追踪,我只是在Flash中重新检查了一下,我上面的代码符合他的要求。我没有为unescape()的输出设置任何内容,因此这没有破坏URL。您正在对
    变量
    对象的其余部分进行假设:您正在用您的答案取消整个
    变量
    对象。我们只得到了简单、集中的示例,
    unescape()
    不是用于
    URLRequest
    数据的通用解决方案。公平地说,我的答案可能不适用于他实际想要实现的目标。好主意。我建议对第一段中的声明进行修改,但这并不完全正确。没有必要对基本字符集进行编码,但您当然可以。从您引用的RFC中,“另一方面,不需要编码的字符(包括字母数字)可以在URL的特定于方案的部分进行编码,只要它们不用于保留目的。”我最终没有使用URLVariables,但这个答案也很有帮助。谢谢
    
    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);