如何防止 Flash 的 URLRequest 转义 URL?

发布于 2024-07-05 07:05:32 字数 447 浏览 8 评论 0原文

我从 Flex 应用程序的 servlet 加载一些 XML,如下所示:

_loader = new URLLoader();
_loader.load(new URLRequest(_servletURL+"?do=load&id="+_id));

正如您可以想象 _servletURL 类似于 http://foo.bar/path/to/servlet

在某些情况下,此 URL 包含重音字符(长话短说)。 我将 unescaped 字符串传递给 URLRequest,但 flash 似乎对其进行了转义并调用了转义的 URL,这是无效的。 有想法吗?

I load some XML from a servlet from my Flex application like this:

_loader = new URLLoader();
_loader.load(new URLRequest(_servletURL+"?do=load&id="+_id));

As you can imagine _servletURL is something like http://foo.bar/path/to/servlet

In some cases, this URL contains accented characters (long story). I pass the unescaped string to URLRequest, but it seems that flash escapes it and calls the escaped URL, which is invalid. Ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

司马昭之心 2024-07-12 07:05:32

我的朋友路易斯想通了:

你应该使用encodeURI来进行UTF8URL编码
http://livedocs.adobe.com/flex/3/langref /package.html#encodeURI()

但不转义,因为它转义为 ASCII 看到
http://livedocs.adobe.com/flex/3/langref /package.html#unescape()

我认为这就是我们在 URL 中得到 %E9 而不是预期的 %C3%A9 的地方。

http://www.w3schools.com/TAGS/ref_urlencode.asp

My friend Luis figured it out:

You should use encodeURI does the UTF8URL encoding
http://livedocs.adobe.com/flex/3/langref/package.html#encodeURI()

but not unescape because it unescapes to ASCII see
http://livedocs.adobe.com/flex/3/langref/package.html#unescape()

I think that is where we are getting a %E9 in the URL instead of the expected %C3%A9.

http://www.w3schools.com/TAGS/ref_urlencode.asp

烟燃烟灭 2024-07-12 07:05:32

我不确定这是否会有所不同,但这是实现相同 URLRequest 的更简洁的方法:

var request:URLRequest = new URLRequest(_servletURL)
request.method = URLRequestMethod.GET;
var reqData:Object = new Object();

reqData.do = "load";
reqData.id = _id;
request.data = reqData;

_loader = new URLLoader(request); 

I'm not sure if this will be any different, but this is a cleaner way of achieving the same URLRequest:

var request:URLRequest = new URLRequest(_servletURL)
request.method = URLRequestMethod.GET;
var reqData:Object = new Object();

reqData.do = "load";
reqData.id = _id;
request.data = reqData;

_loader = new URLLoader(request); 
缪败 2024-07-12 07:05:32

来自 livedocs: http://livedocs.adobe.com/ flex/3/langref/flash/net/URLRequest.html

创建 URLRequest 对象。 如果 System.useCodePage 为 true,则使用系统代码页而不是 Unicode 对请求进行编码。 如果 System.useCodePage 为 false,则使用 Unicode 而不是系统代码页对请求进行编码。

此页面包含更多信息:http://livedocs。 adobe.com/flex/3/html/help.html?content=18_Client_System_Environment_3.html

但基本上你只需要将其添加到将在 URLRequest 之前运行的函数中(我可能会将其放在creationComplete中)事件)

System.useCodePage = false;

From the livedocs: http://livedocs.adobe.com/flex/3/langref/flash/net/URLRequest.html

Creates a URLRequest object. If System.useCodePage is true, the request is encoded using the system code page, rather than Unicode. If System.useCodePage is false, the request is encoded using Unicode, rather than the system code page.

This page has more information: http://livedocs.adobe.com/flex/3/html/help.html?content=18_Client_System_Environment_3.html

but basically you just need to add this to a function that will be run before the URLRequest (I would probably put it in a creationComplete event)

System.useCodePage = false;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文