Actionscript 3 AS3:在URL变量名称中使用下划线字符
是否可以在URL变量名中使用下划线字符?例如,下面的代码输出“my%5Fusername=foo”而不是“my_username=foo” 与跟踪中一样,请求中会显示“%5F”而不是下划线。有没有办法让下划线字符显示出来?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
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);