2012年9月25日 星期二

包含非英文的 URL 是如何被編碼的?

(06/04/2006)

這是看完 O’Conner 的筆記,避免日後忘記:以下的說明是針對瀏覽器的處理過程,至於由 XMLHttpRequest 所處理的方式,會依 browser 的不同而不同。
  1. 如果你的 HTML form 中包含非英文的資料,首先,browser 會先以產生這些非英文字的 numeric character references。以日文的”田中”為例,它的 numerical character references 分別為 & + # + 30000 以及 & + # + 20013(真正的寫法應該把 + 符號移除,但是 wordpress 會自動把它轉成中文字)。其中,30000 和 20013 代表 Unicode 的十進位值。
  2. 然後,這些 numeric character references 以 ISO-8859-1 編碼而形成所謂的 URL-encoded characters。同樣的以田中為例,它的 URL-encoded characters 為
    %26%2330000%3B%26%2320013%3B
  3. 依照這個預設的行為,後端程式接收到這個資料以後,他會將 URL-encoded characters 解回 numeric character references,但是可惜的是很多的後端程式是無法處理這個 numeric character references。
  4. 為瞭解決以上的困境,絕大部分的開發人員採用的方式是在自己的程式(例如使用 Javascript)在 submit 出去之前先對 URL 的非英文資料進行編碼,而大部分使用的編碼方式為 UTF-8。如果我們採用 UTF-8 的編碼的話,田中會變成 %E7%94%B0%E4%B8%AD。

沒有留言:

張貼留言