Flex 图像控件无法处理包含特殊字符的 URL



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

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

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

我一直在测试的URL来自盖蒂图片社:

http://cache2.asset-cache.net/gc/sb10064464f-001-dog-looking-up-close-up-gettyimages.jpg?v=1&c=IWSA资产&k=2&d=BRDT%2birX5%2bLh54FjE4ekKh%2bjEirx6jSgMBJOgVxvtKL5ngFuzD9P5u%2bPvlXK4QAMaEHcwY6NrdJUQFip1%2fKXAA%3d%3d

如果您在SWFLoader(Image扩展的)中的loadContent()函数中逐步执行代码,在从new URLRequest创建requestedURL之后,URLRequest对象上的url属性的所有百分号(再次)都用"%25"转义,生成以下URL(这将从Getty返回500错误):

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

更新

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

对于从具有潜在不安全字符的URL加载的图像,必须使用LoaderURLLoader并手动加载,这样可以避免使用SWFLoaderOSToPlayerURI()函数。

最新更新