【问题标题】:AS3: Use the underscore character in a URLVariables variable nameAS3:在 URLVariables 变量名称中使用下划线字符
【发布时间】:2012-01-09 04:49:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: actionscript-3 urlvariables


    【解决方案1】:

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

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

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

    【讨论】:

    • 我建议进行编辑以修复第一段中的声明,这并不完全正确。对基本字符集进行编码不是必要,但您当然可以。从您引用的 RFC 中,“另一方面,不需要编码的字符(包括字母数字)可以在 URL 的特定于方案的部分中编码,只要它们不用于保留目的。 "
    【解决方案2】:

    使用regular expression,您可以将输出转换为下划线。这种方法利用了以下事实:

    1. URLRequestdata 变量是通用的 Object
    2. StringObject
    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);
    

    【讨论】:

    • 我最终没有使用 URLVariables,但这个答案也很有帮助。谢谢!
    【解决方案3】:

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

    【讨论】:

    • 如果 @Anonymous1 试图在 URL 中使用 variables,但只是返回下划线字符,unescape() 不正确。它还将空格、& 符号、百分号等转换回 ASCII。这些会使 URL 无效。由于下划线是URL specs 的一部分,因此允许对其进行转换,并且任何转换都应仅限于下划线字符。
    • @iND:他没有在变量名中使用其他字符,只是下划线。 OP声明他想用下划线而不是他的转义/编码字符来追踪,我只是在Flash中仔细检查了一下,我上面的代码可以满足他的要求。我没有为 unescape() 的输出设置任何内容,所以这不会破坏 URL。
    • 您正在对 variables 对象的 rest 进行假设:您正在用您的答案对整个 variables 对象进行转义。我们只给出了简单、重点突出的示例,unescape() 不是在URLRequestdata 中使用的通用解决方案。
    • 公平地说,我的回答可能不适用于他实际想要完成的事情。好电话。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    相关资源
    最近更新 更多