在一個網址,我應該用編碼或%20
的+
空間?例如,在下面的例子中,哪一個是正確的?在URL中,空格應該使用%20還是+來編碼?
www.mydomain.com?type=xbox%20360
www.mydomain.com?type=xbox+360
我公司是偏向於前者,但使用Java方法URLEncoder.encode(String, String)
與"xbox 360"
(和"UTF-8"
)returns the latter。
那麼,有什麼區別?
在一個網址,我應該用編碼或%20
的+
空間?例如,在下面的例子中,哪一個是正確的?在URL中,空格應該使用%20還是+來編碼?
www.mydomain.com?type=xbox%20360
www.mydomain.com?type=xbox+360
我公司是偏向於前者,但使用Java方法URLEncoder.encode(String, String)
與"xbox 360"
(和"UTF-8"
)returns the latter。
那麼,有什麼區別?
它不應該問題,如果您將字母A編碼爲%41,則更多。
但是,如果你處理不承認一種形式的系統,它好像你只是將不得不給它什麼,它預計,無論什麼「規範」說。
按照W3C(他們對這些事物的官方消息),在查詢字符串中的空格字符(僅在查詢字符串中)可被編碼爲「%20
」或「+
」。從「建議」下的「查詢字符串」部分:
在查詢字符串中,加號被保留爲空格的簡寫符號。因此,真正的加號必須被編碼。此方法用於使查詢URI更容易在不允許空格的系統中傳遞。
據RFC2396這是對一般的URI的正式規範第3.4節,「查詢」組分是URL依賴性:
3.4。查詢組件 查詢組件是一個信息串, 資源進行解釋。
query = *uric
在一個查詢組件,字符 「;」, 「/」, 「?」 「:」, 「@」, 「&」, 「=」, 「+」, 「」和「$」保留。
因此,如果它不接受查詢字符串中帶有空格的URL編碼爲「+
」字符,則表示其他軟件存在錯誤。
至於你的問題的第三部分,修復URLEncoder.encode()
輸出的一種方法(雖然稍微難看),然後callreplaceAll("\\+","%20")
上的返回值。
而不是使用編碼到application/x-www-form-urlencoded的URLEncoder,使用java.net.URI,它編碼爲true百分比編碼。 – 2014-03-25 18:04:11
您可以使用 - 這意味着大多數人選擇「+」,因爲它更可讀。
編碼查詢值時,無論是form,plus還是percent-20,都是有效的;然而,由於互聯網的帶寬並不是無限的,所以你應該使用plus,因爲它少了兩個字節。
這種混亂是因爲URL仍然是「破」的這一天
採取「http://www.google.com」的實例。這是一個URL。 URL 是一個統一資源定位符,並且實際上是指向網頁 (大多數情況下)的指針。網址其實有一個非常明確的結構 自1994年
第一規格我們可以提取有關「http://www.google.com」 URL的詳細信息:
+---------------+-------------------+
| Part | Data |
+---------------+-------------------+
| Scheme | http |
| Host address | www.google.com |
+---------------+-------------------+
如果我們看一下更多 複雜的URL如 「https://bob:[email protected]:8080/file;p=1?q=2#third」我們可以 提取以下信息:
+-------------------+---------------------+
| Part | Data |
+-------------------+---------------------+
| Scheme | https |
| User | bob |
| Password | bobby |
| Host address | www.lunatech.com |
| Port | 8080 |
| Path | /file |
| Path parameters | p=1 |
| Query parameters | q=2 |
| Fragment | third |
+-------------------+---------------------+
保留的字符是對於每個部分
不同對於HTTP的URL,在一個路徑片段一部分的空間具有將待編碼 「%20」(未,絕對不是「+」) ,而路徑 片段部分中的「+」字符可以保留未編碼。
現在在查詢部分,空格可能被編碼爲「+」(對於 向後兼容性:不要試圖在URI中標準搜索它)或「%20」,而「+」字符由於這種模糊不清)必須轉義爲「%2B」。
這意味着「藍色+淺藍色」串必須被在路徑和查詢部件不同編碼 : 「http://example.com/blue+light%20blue?blue%2Blight+blue」。從 可以推斷出,對URL結構沒有語法意識的情況下,編碼完全構建的URL不可能是 。
這是什麼歸結爲是
你應該後
爲.NET開發人員的利益有
%20
的?
和+
前:HttpUtility.UrlPathEncode使用「% 20'HttpUtility.UrlEncode使用'+'。來源:http://msdn.microsoft.com/en-us/library/system.web.httputility.urlpathencode(v=vs.110).aspx – CodeToad 2014-09-01 11:03:26@MetaByter我認爲在技術上更正確的短語的問題是「在URL中,我應該使用%20或+ *在URL的查詢部分中編碼空格*嗎?因爲雖然你展示的例子只在查詢部分包含空格,但對於所有讀者來說,答案依賴的可能並不清楚。或者,你可以提出這樣的問題:「在*下面的具體URL示例*中,我應該編碼...」 – Matt 2015-05-31 01:06:47