瀏覽器URL編碼

儘管有很多規範URL的標準,例如RFC 3987,但實際應用中卻非常混亂。本文主要介紹瀏覽器發送URL到服務器的一些特性,作爲開發和應用的參考。

通常瀏覽器會用兩種編碼方式發送URL到服務器,分別是UTF-8和ANSI(當前系統語言設置,在Windows系統中可以理解爲當前代碼頁)。接下來分別介紹幾種常用瀏覽器發送URL的編碼特性。

一、直接在地址欄輸入URL的情況

中文Windows環境下,假如直接在瀏覽器的地址欄輸入URL:

http://www.charset.cn/中國.html?kw=中國

  1. IE瀏覽器特性
     PATH部分參數部分
    UTF-8模式(默認) %E4%B8%AD%E5%9B%BD.html kw=中國
      UTF-8編碼、urlencode GBK編碼、無urlencode
    ANSI模式 中國.html kw=中國
      GBK編碼、無urlencode GBK編碼、無urlencode

    中文Windows環境下,IE中默認發送的URL的PATH部分是UTF-8編碼,參數部分是GBK編碼。IE的設置選項中有一項是“總是以 UTF-8 發送URL”可以改變發送URL的編碼爲ANSI。

  2. FireFox瀏覽器特性
     PATH部分參數部分
    UTF-8模式 %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8編碼、urlencode UTF-8編碼、urlencode
    ANSI模式(默認) %D6%D0%B9%FA.html kw=%D6%D0%B9%FA
      GBK編碼、urlencode GBK編碼、urlencode

    中文Windows環境下FireFox中默認發送的URL的PATH和參數都是GBK編碼,在FireFox地址欄輸入“about:config”,找到選項“network.standard-url.encode-utf8”,即可改變發送URL的編碼方式。

  3. Opera瀏覽器特性
     PATH部分參數部分
    UTF-8模式(默認) %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8編碼、urlencode UTF-8編碼、urlencode

二、來自網頁中的鏈接

在不同的瀏覽器中打開不同編碼的網頁中的鏈接,特性也不相同。在不改變瀏覽器默認選項情況下訪問不同編碼的網頁中以下鏈接:

http://www.charset.cn/中國.html?kw=中國

  1. IE瀏覽器特性
     PATH部分參數部分
    UTF-8網頁 %E4%B8%AD%E5%9B%BD.html kw=中國
      UTF-8編碼、urlencode UTF-8編碼、無urlencode
    GBK網頁 %E4%B8%AD%E5%9B%BD.html kw=中國
      UTF-8編碼、urlencode GBK編碼、無urlencode
  2. FireFox瀏覽器特性
     PATH部分參數部分
    UTF-8網頁 %E4%B8%AD%E5%9B%BD.html kw=%E4%B8%AD%E5%9B%BD
      UTF-8編碼、urlencode UTF-8編碼、urlencode
    GBK網頁 %D6%D0%B9%FA.html kw=%D6%D0%B9%FA
      GBK編碼、urlencode GBK編碼、urlencode

如果改變IE默認選項爲ANSI模式或者將FireFox改爲UTF-8模式的訪問結果可以自己測試。

幾點說明:

  1. 對於開發人員而言,一定要考慮到不同環境下URL編碼的不同,才能實現系統更好的兼容性。兼容性好的系統必須要能夠識別來自客戶端URL的編碼,才能正確處理。
    例如在Opera瀏覽器地址欄直接輸入“http://www.baidu.com/s?wd=我們”,就會發現不能正確訪問。
  2. 不同的WEB服務器對各種編碼的URL處理也不相同,儘量不要使用中文字符作文件名。
  3. 如果寫入網頁中的鏈接包括中文字符,最好使用urlencode處理,才能和當前網頁編碼無關。否則有可能不能正確訪問。
  4. 很多情況下瀏覽器的地址欄看到URL並不等同於發送到服務器的URL。要正確查看瀏覽器發送的到服務器URL,最好藉助一些工具分析HTTP的請求頭。
發佈了44 篇原創文章 · 獲贊 6 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章