細談 URL 編碼 (Part IV)
The following examples had been tested on Mozilla's Firefox and Microsoft's IE. The document is provided as is. You are welcomed to use it for non-commercial purpose.Written by: 國立中興大學資管系呂瑞麟
請勿轉貼
看其他教材
在 Part IV 中,我們將之前的測試網頁改成 UTF-8 的編碼,在傳遞 URL 之前 仍然不進行編碼。使用者可以點選 測試網頁 來試試看;另外,makeRequest() 的內容跟前一個測試 網頁大同小異,只是這次呼叫的遠端 servlet 是 EchoUTF8。 請在測試網頁上點一下"確定"按鈕。如果使用 Firefox,你應該會看到如下的對話視窗:
如果使用 IE,你應該會看到如下的畫面:
從以上的說明和測試,我們馬上知道要開發一個同時適用於 Firefox 和 IE 的 Ajax 網頁需要進一步的處理。在之前,我們在 由 XMLHttpRequest 送出中文資料給 Tomcat 中,已經找到一個解決 方式了,那就是在傳送 URL 之前,將非 ASCII 資料利用 Javascript 的 encodeURIComponent() 方法來進行編碼,然後才讓 XMLHttpRequest 物件將 URL 傳送出去。
由於 Javascript 的 encodeURIComponent() 方法會將傳入的字串轉換成 UTF-8 編碼的字元,因此 Ajax 的程式碼必須修改成
url = url + "?data=" + encodeURIComponent(document.myform.elements[0].value); http_request.open('GET', url, true); http_request.send(null);
從畫面中,我們可以清楚的看出,不論是 Firefox 或者是 IE 都能得到正確的 結果。同樣的,從之前的討論結果,我們也可以把網頁內容以 UTF-8 來編碼, 因為在傳送之前,我們還是以 encodeURIComponent() 方法來進行編碼,servlet 只要以 UTF-8 來處理便可以得到正確的結果,讀者可以試試 這個測試網頁。
討論到這裡,我想對於 URL 編碼這個主題大概已經有一個不錯的概念。 由於每一個 process 傳遞到另一個 process 都可能發生編碼的問題, 我希望利用這一連串的說明、討論、以及測試,能夠清楚的說明編碼的困難 以及解決問題的方式;理論上來說,你下次遇到編碼的問題,應該也可以 利用類似的過程來解決。說到這裡,突然想到:Dojo 和 YUI 究竟是如何處理 URL?
回到:Part III
Written by: 國立中興大學資管系呂瑞麟
沒有留言:
張貼留言