2010-04-23 40 views
4

RFC 2396UrlDecode是否正確處理加號(+)?

加號「+」,美元「$」和逗號 「」字已被添加到
那些在‘保留’設置,因爲 他們被視爲在 內保留查詢組件。

事實上,搜索這個網站的「加+逗號,美元$」,你會得到

https://stackoverflow.com/search?q=plus+%2B+comma+,+dollar+ $

加上僅編碼(應用程序),當它沒有被用來作爲分隔符。

但是,作爲others have observed,.NET的UrlDecode函數將plus轉換爲空格。這種行爲在哪裏指定?

回答

7

此行爲在哪裏指定?

HTML spec,很好奇。

UrlDecode是一種誤導性命名。

+只代表HTML中定義的application/x-www-form-urlencoded數據中的空格;即以POST提交請求主體的形式或URL的?query部分。這是一個特例!在URL的其他地方,加號只是一個優點。

http://www.example.com/path+path/x?query+name=query+value 

在此URL參數query name設置爲query value。它可能通過GET表單提交這份表單字段來產生:

<input name="query name" value="query value"> 

但是,文件夾的名字是從字面上path+path。沒有空間。

因爲這是令人困惑和可能不明確的,所以最好的方法是將空格編碼爲%20。您可以使用UrlPathEncode在.NET中執行此操作。這同樣適用於URL和路徑的查詢部分。

相關問題