URL百分號編碼


百分號編碼是什么!

百分號編碼(Percent-Encoding)也被稱為 URL 編碼,是一種編碼機制。該機制主要應用於 URI 編碼中,URI 包含 URL 和 URN,所以它們也同樣適用。除此之外,也用於 MIME 類型為"application/x-www-form-urlencoded"的內容。

url編碼解碼,又叫百分號編碼,是統一資源定位(URL)編碼方式。URL地址(常說網址)規定了常用地數字,字母可以直接使用,另外一批作為特殊用戶字符也可以直接用(/,:@等),剩下的其它所有字符必須通過%xx編碼處理。 現在已經成為一種規范了,基本所有程序語言都有這種編碼,如js:有encodeURI、encodeURIComponent,PHP有 urlencode、urldecode等。編碼方法很簡單,在該字節ascii碼的的16進制字符前面加%. 如 空格字符,ascii碼是32,對應16進制是'20',那么urlencode編碼結果是:%20

 foo://example.com:8042/over/there?name=ferret#nose  
   \_/  \______________/ \________/\_________/ \__/ 
     |                 |                        |                    |             | 
scheme     authority               path             query      fragment

URI是統一資源標識的意思,通常我們所說的Url只是URI的一種。典型Url的格式如上面所示。下面提到的Url編碼,實際上應該指的是URI編碼。

為什么需要Url編碼

通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私數據,對於Url來說,之所以要進行編碼,是因為Url中有些字符會引起歧義

例如Url參數字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc& ie=utf-8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和= 符號進行轉義,也就是對其進行編碼。

又如,Url的編碼格式采用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字符,例如中文。否則如果客戶端瀏覽器和服務端瀏覽器支持的字符集不同的情況下,中文可能會造成問題。

Url編碼的原則就是使用安全的字符(沒有特殊用途或者特殊意義的可打印字符)去表示那些不安全的字符。

哪些字符需要編碼

RFC3986文檔規定,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。

US-ASCII字符集中沒有對應的可打印字符

Url中只允許使用可打印字符。US-ASCII碼中的10-7F字節全都表示控制字符,這些字符都不能直接出現在Url中。同時,對於80-FF字節(ISO-8859-1),由於已經超出了US-ACII定義的字節范圍,因此也不可以放在Url中。

 

空格 Url在傳輸的過程,或者用戶在排版的過程,或者文本處理程序在處理Url的過程,都有可能引入無關緊要的空格,或者將那些有意義的空格給去掉
引號以及<> 引號和尖括號通常用於在普通文本中起到分隔Url的作用
# 通常用於表示書簽或者錨點
% 百分號本身用作對不安全字符進行編碼時使用的特殊字符,因此本身需要編碼
{}|\^[]`~ 某一些網關或者傳輸代理會篡改這些字符

需要注意的是,對於Url中的合法字符,編碼和不編碼是等價的,但是對於上面提到的 這些字符,如果不經過編碼,那么它們有可能會造成Url語義的不同。因此對於Url而言,只有普通英文字符和數字,特殊字符$-_.+!*'()還有保留 字符,才能出現在未經編碼的Url之中。其他字符均需要經過編碼之后才能出現在Url中。

常見字符的Url編碼列表:

 

保留字符的Url編碼
! * " ' ( ) ; : @ &
%21 %2A %22 %27 %28 %29 %3B %3A %40 %26
= + $ , / ? % # [ ]
%3D %2B %24 %2C %2F %3F %25 %23 %5B %5D

參考:https://www.cnblogs.com/leaven/archive/2012/07/12/2588746.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM