URL中的保留和不安全字符


https://blog.csdn.net/wzd2012/article/details/79077248

*******************************************************************

書寫URL時要使用US-ASCII字符集可以顯示的字符。

http://www.google.com

如果需要在URL中使用不屬於此字符集的字符,就要使用特殊的符號對該字符進行編碼。

如:最常使用的空格用%20來表示,例如:http://www.google.com/new%20123.html

除了那些無法顯示的字符外,還需要在URL中對那些保留(reserved)字符和不安全(unsafe)字符進行編碼。

所謂保留字符就是那些在URL中具有特定意義的字符。不安全字符是指那些在URL中沒有特殊含義,但在URL所在的上下文中可能具有特殊意義的字符。例如雙引號(“”)

部分保留字符和不安全字符及其URL編碼
字符 描述 用法 編碼
; 分號 保留 %3B
/ 斜線 保留 %2F
? 問號 保留 %3F
: 冒號 保留 %3A
@ “at”符號 保留 %4O
= 等號 保留 %3D
& “和”符號 保留 %26
< 小於號 不安全 %3C
> 大於號 不安全 %3E
" 雙引號 不安全 %22
# 井號 不安全 %23
% 百分號 不安全 %25
{ 左大括號 不安全 %7B
} 右大括號 不安全 %7D
| 豎線 不安全 %7C
\ 反斜線 不安全 %5C
^ 加字號 不安全 %5E
~ 波浪 不安全 %7E
[ 左中括號 不安全 %5B
] 右中括號 不安全 %5D
` 反單引號 不安全 %60
  空格 不安全

%20

通常情況下,如果對某個字符能否在URL中使用有疑問,那么你應該始終使用該字符的編碼。除字母、數字和字符$-_.+!*'()外的其它所有字符都應該使用編碼。

 

URL編碼在ASCII表中的體現

如何編碼?

眾所周知,字符是可由八位字節數(octet)來表示的,八位字節數可用十六進制來表示它的值。如字符“<”的八位字節數十六進制值是3C。在URL中,字符的編碼方式為:“%”加上字符的兩個十六進制數值。舉幾個例子:

  • “<”可以被編碼為%3C,空格“SP”可被編碼為“%20”
  • “田”的GB2312編碼十六進制值是CC EF,這時“田”的URL編碼為%CC%EF
  • “囧”的GBK編碼十六進制值是87 E5,這時“囧”的URL編碼為%87%E5
  • “田”的UTF-8編碼十六進制值是E7 94 B0,這時“田”的URL編碼為%E7%94%B0

URL中包含漢字時的更多話題

RFC1738沒有規定漢字的編碼方式,而是讓瀏覽器自己去決定,因此造成了URL漢字編碼的不統一。經過研究,對於URL中的“查詢字符串”和“路徑”中包含漢字,不同瀏覽器有不同的處理。

1. 查詢字符串中包含漢字

在網址輸入:http://www.baidu.com/s?wd=田囧 ,敲擊回車,使用Fiddler觀察瀏覽器發出的請求(以IE8和Firefox為例):

查詢字符串中含有中文

IE8將漢字作為GBK編碼,直接發往服務器(這其實是不符合RFC規范的);Firefox則多了一次加%的操作。Windows操作系統是GBK編碼。得到結論,地址欄直接訪問URL,漢字作為查詢字符串(Query string)時,IE和Firefox會使用系統編碼發至服務器端,Firefox會按規矩編碼。

注意1:不要用Google進行測試,Google的搜索URL(類似:http://www.google.com/#hl=en&source=hp&q=田囧 ),搜索關鍵詞那里不是查詢字符串,因為前面有個#……我開始沒注意到,被搞迷茫了很久……

注意2:這只是對URL直接訪問的規律。如果頁面時從鏈接點擊打開的,例如從A頁面含中文的鏈接打開了B頁面,那么瀏覽器對中文的編碼取決於A頁面的編碼。

2. URL路徑中包含漢字

在網址直接輸入:http://www.hudong.com/wiki/田囧 ,敲擊回車,觀察請求

路徑中含有中文

IE8和Firefox都把漢字作為UTF8,按規范進行了URL編碼,還好。

 


免責聲明!

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



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