我正在构建一个 Flex 应用程序,用户可以在其中输入 Internet 上图像的 URL,然后快速加载 URL 指向的图像。这适用于没有特殊字符的 URL(通过设置source
属性或调用load()
on Image
)。但是,当提交的 URL 包含已经转义的特殊字符时,即在大多数情况下直接从浏览器的 URL 栏中直接复制时,URLRequest
会再次使用 '%25' 转义百分号,这会使 URL 无效并且服务器返回错误。在浏览器中粘贴相同的 URL 可以很好地加载图像。我已经decodeURI()
在 URL 上尝试过,但它忽略了一大堆字符,所以我尝试decodeURIComponent()
了,并且正确解码了所有内容,但是当URLRequest
去重新编码它,它会忽略现在解码的特殊字符并且不会转义它们,所以在这种情况下 URL 无效,因为它仍然包含不安全的字符并且失败。那么,我怎样才能发送URLRequest
带有特殊字符(编码或未编码)的东西并让它真正起作用?真的,我希望它不对我的 URL 做任何事情,让我确定它是否有效,但它嵌入在 Flash Player 全局 swc 中,因此是 flash 的封闭源代码,我看不到源代码代码。任何帮助将不胜感激!
这基本上就是我正在做的事情:
var image:Image = new Image();
image.source = textInput.text;
我一直在测试的 URL 来自 Getty Images:
如果您单步执行代码,在loadContent()
函数 in SWFLoader
(which Image
extends), after requestedURL
is created from anew URLRequest
中,对象url
上的属性URLRequest
所有百分号都用 '%25' 转义(再次),生成以下 URL(它将返回一个来自 Getty 的 500 错误):
更新
- 我忘了提到我正在运行 Flex SDK 4.1,而且
Image
是mx.controls.Image
- 根据 wvxvw 的建议,我尝试
unescape()
了与使用相同的结果decodeURIComponent()
- 我还尝试
encodeURI()
在使用 解码后调用 URLdecodeURIComponent()
,但它当然会忽略解码 URL 中的许多不安全字符,并且不会重新编码它们。URLRequest
做同样的事情,所以最后调用的 URL 没有被编码,因此失败。 - 同样有趣的是,当我尝试调用
encodeURIComponent()
URL 并在传入之前对其重新编码时,URLRequest
并没有重新编码百分比,大概是因为它们已经是 '%25'? - 最后,它似乎只寻找 '%' 符号并简单地用 '%25' 替换它们(如果它们后面还没有被 '25' ),然后忽略其他不安全的字符。为什么会这样做?为什么以前没有其他人遇到过这个问题?