是否有用于将as3中的字符串转换为application / x-www-form-urlencoded格式的库?
具体来说,我正在寻找与java URLEncoder http://java.sun.com/javase/6/docs/api/java/net/URLEncoder.html
相同的功能不幸的是,as3的转义和encodeURIComponent函数没有这样做。例如,很多%20s而不是+'。
答案 0 :(得分:7)
对于编码网址参数,%20和+都是空格字符的有效表示,URLVariables.toString()和URLUtil.objectToString()都使用前者发出兼容的application / x-www-form-urlencoded数据(每ECMA-262)。 encodeURI(),encodeURIComponent()和escape()函数的运算方式类似。来自AS3文档:
flash.net.URLVariables.toString()
返回包含all的字符串 MIME中的可枚举变量 内容编码 应用程序/ x-WWW窗体-urlencoded。
mx.utils.URLUtil.objectToString()
您通常使用此方法进行转换 String的ActionScript对象 然后你追加到一个结尾 URL。默认情况下,URL无效 字符是URL编码(转换 到%XX格式。)
将字符串编码为有效的URI组件。 将URI的子字符串转换为 所有字符都在的字符串 编码为UTF-8转义序列 除非一个角色属于一个角色 一小组基本人物。
将参数转换为a 字符串并以URL编码方式对其进行编码 格式,大多数非字母数字 字符替换为% 十六进制序列。
以下是显示所有四种方法的用法和输出的示例:
import mx.utils.URLUtil;
private function test():void
{
var url:String = "http://www.google.com/search?";
var s:String = "here is my search query";
var variables:URLVariables = new URLVariables();
variables.q = s;
var o:Object = new Object();
o.q = s;
trace(url + "q=" + encodeURIComponent(s));
trace(url + variables.toString());
trace(url + "q=" + escape(s));
trace(url + URLUtil.objectToString(o));
}
所有四个都发出相同的结果(就像JavaScript自己的encodeURIComponent()一样):
// http://www.google.com/search?q=here%20is%20my%20search%20query
我同意加号在眼睛上更容易!手动交换它们:
trace(url + "q=" + escape(s).split("%20").join("+"));
但是如果有一个ActionScript类或顶级函数使用加号而不是十六进制序列作为空格,我就不知道了。
答案 1 :(得分:0)
我想补充一点,转义和 encodeURIComponent 只会在不 mutlibyte中的字符串时给出相同的结果。对于像ñ(西班牙语)这样的多字节字符串,escape()不会对值进行相关编码。使用encodeURIComponent和decodeURIComponent将。我发现hardway试图在多字节字符串上使用escape()来使用new navigateToURL(新的URLRequest(在使用mailto URL时会无声地失败)。