所以,這里的答案都有點(diǎn)不完整。使用‘%20’對(duì)URL中的空格進(jìn)行編碼是在RFC 3986,它定義了如何構(gòu)建URI。本規(guī)范中沒有提到使用“+”對(duì)空間進(jìn)行編碼-如果僅按此規(guī)范進(jìn)行編碼,則必須將空間編碼為‘%20’。
對(duì)編碼空間使用“+”的提及來(lái)自HTML規(guī)范的各種形式-特別是在描述內(nèi)容類型‘a(chǎn)pplication/x-www-form-urlencode’的一節(jié)中。這用于發(fā)布表單數(shù)據(jù)。
現(xiàn)在,HTML2.0規(guī)范(RFC 1866)第8.2.2節(jié)明確指出,GET請(qǐng)求的URL字符串的查詢部分應(yīng)該編碼為‘a(chǎn)pplication/x-www-form-urlencode’。理論上,這表明在查詢字符串中的URL中使用‘+’是合法的(在‘?’之后)。
但是.。真的嗎?記住,HTML本身就是一個(gè)內(nèi)容規(guī)范,帶有查詢字符串的URL可以與HTML以外的內(nèi)容一起使用。此外,盡管HTML規(guī)范的后期版本繼續(xù)在‘a(chǎn)pplication/x-www-form-urlencode’內(nèi)容中將‘+’定義為合法,但它們完全忽略了GET請(qǐng)求查詢字符串定義為該類型的部分。事實(shí)上,在HTML2.0規(guī)范之后,沒有提到查詢字符串編碼。
這就給我們留下了一個(gè)問題-它有效嗎?當(dāng)然,在查詢字符串中支持“+”的遺留代碼很多,生成它的代碼也很多。所以,如果你使用“+”,幾率是很好的。(事實(shí)上,我最近對(duì)此做了所有的研究,因?yàn)槲野l(fā)現(xiàn)了一個(gè)主要的站點(diǎn),它沒有接受GET查詢中的‘%20’作為一個(gè)空間。他們實(shí)際上沒能解碼任何百分比編碼的字符。因此,您使用的服務(wù)也可能是相關(guān)的。)
但是,從規(guī)范的純讀來(lái)看,如果沒有HTML 2.0規(guī)范中的語(yǔ)言轉(zhuǎn)到以后的版本,URL就完全由RFC 3986覆蓋,這意味著空間應(yīng)該轉(zhuǎn)換為‘%20’。當(dāng)然,如果您請(qǐng)求的不是HTML文檔,就應(yīng)該是這種情況。