2011-05-16 33 views
0

我发现在flash(至少10.x)和ie(7,8,9)中,如果我尝试加载包含转义的utf-8字符的图像url(p%C3%83%C2% A5)即使我对它们进行双重或三重编码,字符在发出url请求之前也会被解码。有没有什么办法来防止这种情况,所以URL(带有转义)我想要的方式实际上是什么要求?如何防止在Flash中解码utf-8 url?

其导致的问题是我们给utf-8解码url请求上的http状态301给编码的url,然后flash尝试请求(但是也就是解码它),并且因为301 +即自动解码。

编辑,添加代码示例:

var url:URLRequest = new URLRequest('http://mydomain.com/p%C3%A5.jpg'); 
var loader:Loader = new Loader(); 
loader.load(url); 

现在我想请求走了过来线http://mydomain.com/p%C3%A5.jpg(和它在其他浏览器一样),但在IE它越过线http://mydomain.com/PA ¥的.jpg

编辑:我也试图与%25%替换(双编码%)的(好)的建议,但没有奏效,它只是造成这一请求走了过来线:

http://mydomain.com/p%25C3%25A5.jpg

+0

这听起来像是你在滥用urlencoding。发布提出请求的Flash代码 – 2011-05-16 17:49:09

+0

好主意,添加代码。 – Shizam 2011-05-16 18:28:09

+0

IE不仅解码URL,它很可能是错误地解码它。它使用Windows默认编码(ish),当它可能应该是UTF-8。这可能是因为页面本身未设置为使用UTF-8。 – bzlm 2011-05-16 18:47:43

回答

1

IE可能试图通过先解码它来解析文件名。

301是重定向
为什么不只是做一个redirct页面 这可能是另一种选择。

var url:URLRequest = new URLRequest('http://mydomain.com/redirpage.php?page=p%C3%A5.jpg'); 
+0

IE浏览器肯定是试图通过解码它首先解析文件名,这似乎有点跛脚,因为我告诉它到底如何我想要的URL和它的变化。重定向页面是一个解决方案,但这会弄乱我们的CDN缓存,因为请求url与CDN缓存的内容不同。 – Shizam 2011-05-16 21:32:13

+0

在您的服务器脚本中填入传递参数值“page =”的位置,请参阅以下关于如何设置重定向页面的链接。 http://www.webconfs.com/how-to-redirect-a-webpage.php – 2011-05-16 21:44:38