URL編碼

當(dāng) URL 路徑,或者查詢參數(shù)中帶有中文、特殊字符的時候,就需要對 URL 進行編碼(采用十六進制編碼格式)。URL 編碼的原則是使用安全字符(即沒有特殊用途或者特殊意義的字符)去表示那些不安全的字符。

為什么需要URL編碼

URL 之所以需要編碼,是因為 URL 中的某些字符會引起歧義,比如若 URL 查詢參數(shù)中包含”&”或者”%”就會造成服務(wù)器解析錯誤,再比如,URL 的編碼格式采用的是 ASCII 碼而非 Unicode,這表明 URL 中不允許包含任何非 ASCII 字符(比如中文),否則就會造成 URL 解析錯誤。

URL基本組成

一個 URL 的基本組件包括協(xié)議、域名、端口號、路徑和查詢字符串,其中路徑和查詢字符串之間使用問號?隔離,示例如下:

http://www.biancheng.net/index?param=10

其中域名為 http://www.biancheng.net,路徑為 index,查詢字符串為 param=1。

URL 中規(guī)定了一些字符(:/ ? # [ ] @)用來分隔不同的 URL 組件,這些字符被稱為保留字符。例如:

  • 冒號:用于分隔協(xié)議和主機組件,斜杠用于分隔主機和路徑
  • 問號:用于分隔路徑和查詢參數(shù)等。

還有一些保留字符(! $ & * + , ; =)起到分割 URL 不同組件的作用,比如:

  • =用于表示查詢參數(shù)中的鍵值對
  • &符號用于分隔查詢多個鍵值對。

哪些字符需要編碼

URL 編碼協(xié)議規(guī)定(即 RFC3986 協(xié)議):URL 中只允許包含英文字母、數(shù)字、以及這 4 個 - _ . ~ 特殊字符和所有的保留字符。協(xié)議中規(guī)定了以下保留字符:

! * ’ ( ) ; : @ & = + $ , / ? # [ ]

但是當(dāng)組件中的普通數(shù)據(jù)包含這些特殊字符時,它們就變成了不安全字符,此時就需要對其進行編碼處理。比如查詢字符串中包含了特殊字符:

http://www.biancheng.net/index?param=10*&param1=20*

下表列出了一些 URL 特殊字符及其編碼:

為了讓您思路更清晰,下面簡單總結(jié)一下,哪些字符需要編碼。主要分為以下三種情況:

  • ASCII 表中沒有對應(yīng)可顯示字符的,例如漢字。
  • 不安全字符,包括:# ”% <> [] {} | \ ^ ` ~ 。
  • 不當(dāng)做保留字符來使用的保留字符,即& / : ; = ? @ 。

URL在線編碼解碼

通過瀏覽器可以搜索到許多在線 URL 編碼解碼工具,比如編碼轉(zhuǎn)換工具(點擊訪問),這些工具能夠很方便的實現(xiàn) URL 的編碼與解碼。示例如下:

編碼前: http://www.biancheng.net/s?ie=utf-8&f=8&tn=baidu&wd=hell 編程幫
編碼后: http://www.biancheng.net/s?ie=utf-8&f=8&tn=baidu&wd=hell%20%B1%E0%B3%CC%B0

在我們編寫爬蟲程序的過程中,需要處理各式各樣的 URL,因此學(xué)習(xí)本節(jié)內(nèi)容有助于您掌握處理 URL 的知識。

原文:
知乎
https://zhuanlan.zhihu.com/p/436553237

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容