0

我正在构建一个 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:

http://cache2.asset-cache.net/gc/sb10064464f-001-dog-looking-up-close-up-gettyimages.jpg?v=1&c=IWSAsset&k=2&d=BRDT%2firX5%2bLh54FjE4ekKh%2bjEirx6jSgMBJOgVxvtKL5ngFuzD9P5u%2bPvlXK4QFiEpHc%2bPvlXUK4QFiEp1Hc%66N 2fKXAA%3d%3d

如果您单步执行代码,在loadContent()函数 in SWFLoader(which Imageextends), after requestedURLis created from anew URLRequest中,对象url上的属性URLRequest所有百分号都用 '%25' 转义(再次),生成以下 URL(它将返回一个来自 Getty 的 500 错误):

http://cache2.asset-cache.net/gc/sb10064464f-001-dog-looking-up-close-up-gettyimages.jpg?v=1&c=IWSAsset&k=2&d=BRDT%252firX5%252bLh54FjE4ekKh%252bjEirx6jSgMBJOgVxvtKL5ngFuzD9P5u%252bPvlXK4QAMaEHcwY6NrdJUQFip1% 252fKXAA%253d%253d

更新

  • 我忘了提到我正在运行 Flex SDK 4.1,而且Imagemx.controls.Image
  • 根据 wvxvw 的建议,我尝试unescape()了与使用相同的结果decodeURIComponent()
  • 我还尝试encodeURI()在使用 解码后调用 URL decodeURIComponent(),但它当然会忽略解码 URL 中的许多不安全字符,并且不会重新编码它们。URLRequest做同样的事情,所以最后调用的 URL 没有被编码,因此失败。
  • 同样有趣的是,当我尝试调用encodeURIComponent()URL 并在传入之前对其重新编码时,URLRequest并没有重新编码百分比,大概是因为它们已经是 '%25'?
  • 最后,它似乎只寻找 '%' 符号并简单地用 '%25' 替换它们(如果它们后面还没有被 '25' ),然后忽略其他不安全的字符。为什么会这样做?为什么以前没有其他人遇到过这个问题?
4

1 回答 1

1

对于从具有潜在不安全字符的 URL 加载的图像,您必须手动使用LoaderorURLLoader并加载它们,这避免了SWFLoaderOSToPlayerURI()功能。

于 2012-09-28T17:52:36.140 回答