Flex Image控件无法处理具有特殊字符的URL

时间:2012-09-27 19:04:00

标签: flex actionscript flash

我正在构建一个Flex应用程序,用户可以在其中输入Internet上图像的URL,然后使用flash加载URL指向的图像。这适用于没有特殊字符的网址(通过设置source属性或在load()上调用Image)。但是,当提交的URL具有已经转义的特殊字符时,即在大多数情况下只是直接从浏览器中的URL栏复制,URLRequest再次使用'%25'转义百分号,这使得URL无效,服务器返回错误。在浏览器中粘贴相同的URL会加载图像就好了。我在网址上尝试了decodeURI(),但忽略了大量字符,因此我尝试了decodeURIComponent(),并对所有内容进行了正确解码,但是当URLRequest重新编码时,它忽略了现在解码的特殊字符,并且不会对它们进行转义,因此在这种情况下,URL无效,因为它仍然有不安全的字符并且失败。那么,我怎样才能发送URLRequest带有特殊字符的东西(编码或未编码)并让它真正起作用?真的,我希望它没有对我的URL做任何事情,让我确定它是否有效,但它嵌入在Flash Player全局swc中,因此是闪存的封闭源代码,我看不到源代码码。任何帮助将不胜感激!

这基本上就是我正在做的事情:

var image:Image = new Image();
image.source = textInput.text;

我一直在测试的网址来自Getty图片:

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%2bPvlXK4QAMaEHcwY6NrdJUQFip1%2fKXAA%3d%3d

如果您单步执行代码,请loadContent() SWFLoader Image功能requestedURL new URLRequest urlURLRequest创建Image后, mx.controls.Image对象上的unescape()属性将所有百分号都用'%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,而decodeURIComponent()encodeURI()
  • 根据wvxvw的建议,我尝试decodeURIComponent()与使用URLRequest
  • 的结果相同
  • 在使用encodeURIComponent()解码后,我也尝试在URL上调用URLRequest,但当然它忽略了解码后的URL中的许多不安全字符,并且不对它们进行重新编码。 {{1}}执行相同操作,因此最终调用的URL未编码,因此失败。
  • 有趣的是,当我尝试在网址上调用{{1}}并在传入之前对其进行重新编码时,{{1}}没有重新编码百分比,大概是因为它们已经'%25 “?
  • 最后,它似乎只查找'%'符号并简单地将它们替换为'%25'(如果它们未被'25'跟随),则忽略其他不安全的字符。为什么会这样做?为什么以前没有其他人遇到过这个问题?

1 个答案:

答案 0 :(得分:1)

对于从具有可能不安全字符的网址加载的图片,您必须使用LoaderURLLoader并手动加载它们,这样可以避免SWFLoaderOSToPlayerURI()功能。