2011-05-16 35 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