星期日, 11月 20, 2011

URL decode/encode 觀念題

做網頁傳遞中文時常會用到URL decode/encode,
混亂的 URLEncode 說明了為什麼要使用URLEncode,
有興趣可以去讀一下。



常用的語言函式庫:
(擷錄至混亂的URLEncode一文中)

因為有這樣的差異,所以開發人員在使用函式庫的時候常常會搞混什麼時候該用/不該用什麼函式。
以 PHP 來說就分為兩組函式:
  • urlencode / urldecode
    簡單地說就是以 HTTP 所使用的 application/x-www-form-urlencoded 的編碼規則,也就是會將空白字元編碼成 + 而不是%20
  • rawurlencode / rawurldecode
    按照 RFC 3986 所定義的方式來作編碼。
Python 版本的話就是:
  • urllib.urlencode / urllib.urldecode
    會把空白字元編碼成 +
  • 目前要使用 Python 3 以後的 urllib.parse.urlencode 才會按照 RFC 3986 的方式來作編碼,若是 2.x 的版本就要另外處理或是找 3rd-party 資料庫來做。
JavaScript 的 encodeURI 或是 encodeURIComponent (兩者僅相差一些保留字是否要作編碼,如 #)目前則是都使用 RFC 3986 的方式來作編碼,所以要作 application/x-www-form-urlencoded 的編碼時(AJAX POST),就要自己把 %20 替換成 + (jQuery 目前的程式碼就是這樣做的)
Java 的 java.net.URLEncoder.encode 這個 method 也是編碼成 application/x-www-form-urlencoded 的方式,如果要遵照 RFC 3986 的定義,則可以自行再把 + 替換成 %20 即可。


測試URL decode/encode的網站
http://meyerweb.com/eric/tools/dencoder/

ASCIIAmerican Standard Code for Information Interchange,美國資訊交換標準代碼字元表格
http://zh.wikipedia.org/wiki/ASCII
http://zh.wikipedia.org/wiki/EASCII

1 則留言:

  1. 感謝分享。 但是與meyerweb的解碼/編碼工具相比,還有另一種工具
    url-decode.com
    該工具通過採用URL編碼字符串並通過解碼特殊字符將其轉換為常規URL字符串來工作。 普通URL可以使用PHP url_encode函數進行編碼,也可以通過javascript進行編碼,或者使用我們的Online URL Encode函數進行編碼。 編碼的URL僅包含那些可以通過查詢字符串輕鬆傳遞的字符,以避免在瀏覽器字符串和URL中混淆瀏覽器。
    該網站還在一個域內提供與數字實用程序,單位轉換器,開發人員,字符串實用程序,轉換器和IP工具相關的工具。

    回覆刪除

留個話吧:)

其他你感興趣的文章

Related Posts with Thumbnails