2010-01-28 98 views
28

爲什麼你需要編碼網址?是否有充分的理由說明爲什麼您必須將GET數據中的每個空間都更改爲%20爲什麼你需要編碼URL?

+4

一個很好的理由是,在印刷材料最好是使用'%20'使一些BOD可以在不試圖猜測的空格數鍵入它! – 2012-08-10 10:19:46

回答

27

RFC 2936,部分2.4.3:

空格字符被排除 因爲顯著空間可能 消失,並且當URI被轉錄 或排版或經受 處理可以 引入微不足道空間文字處理 程序。在很多情況下,空白也用於對分隔URI進行分隔。

+3

無法得到比RFC更準確的 – Perpetualcoder 2010-01-28 06:36:26

+1

換句話說,「不,沒有固有的技術原因,但我們知道實現者和用戶都是sl。不馴的。」這可能是正確的決定,主要是因爲用戶難以保持適當的空間。 – 2010-01-28 06:39:37

+0

@Matthew - 有一個固有的技術原因,請參閱我的回答 – Rippo 2010-01-28 06:40:47

-2

嗯,你這樣做是因爲每個不同的瀏覽器都知道構成URL的字符串是如何編碼的。將空間轉換爲%20等,使得URL/URI可移植。它可能是拉丁語-1,它可能是unicode。它需要標準化爲普遍理解的東西。看看rfc3986 http://tools.ietf.org/html/rfc3986#section-2.1

+1

更改字節的表示不指定編碼。至少不是字面上的。 – 2012-08-09 17:10:13

24

因爲有些字符有特殊的含義。

例如,在查詢字符串中,與號(&)用作鍵/值對之間的分隔符。如果要將&符號放入其中一個值中,它看起來就像是一個值的結尾和下一個鍵的開始之間的分隔符。所以對於這樣的特殊字符,我們使用百分號編碼,以便我們確信數據是明確編碼的。

+0

但是,假設您可以將'&26'編碼爲'%26'。你仍然可以得到一個包含像'100%26 = 22'這樣的字符串的值。它仍然會看起來像key-val對之間的分隔符是不是? – 2017-01-14 01:25:08

+2

不,因爲'%'是具有特殊含義的字符之一,所以也必須進行編碼(如'%25')。如果你有字符串值'%26',那麼它會出現在一個URL中作爲'%2526',因爲'%'會被編碼。爲了得到字符串值,你需要將'%25'解碼爲'%',並將字符串'%26'留給你。 – Jim 2017-01-14 02:30:34

6
  • 原來舊的瀏覽器可能會被空間困惑(不再是真正的問題了)。
  • 現在,如果有人複製的URL發送一個鏈接 - 空間可以打破的超級鏈接 - 即

嘿!看看這個derping貓彈鋼琴!

http://www.mysite.com/?video=funny cat plays piano. 

看看鏈路是如何斷開的?

現在看看這個:

http://www.mysite.com/?video=funny%20cat%20plays%20piano.