我想發送一個包含與&字符串的GET消息,並且無法計算如何在URL中轉義&符號。在URL中轉義符號
例子:
http://www.example.com?candy_name=M&M
result => candy_name = M
我也試過:
http://www.example.com?candy_name=M\&M
result => candy_name = M\\
我使用手動網址,所以我只需要正確的字符。
我不能使用任何庫。如何做呢?
我想發送一個包含與&字符串的GET消息,並且無法計算如何在URL中轉義&符號。在URL中轉義符號
例子:
http://www.example.com?candy_name=M&M
result => candy_name = M
我也試過:
http://www.example.com?candy_name=M\&M
result => candy_name = M\\
我使用手動網址,所以我只需要正確的字符。
我不能使用任何庫。如何做呢?
他們需要的是百分比編碼:
> encodeURIComponent('&')
"%26"
所以你的情況,該網址看起來像:
http://www.mysite.com?candy_name=M%26M
您可以將%字符用於URL中不允許的'escape'字符。見RFC1738。
ASCII值的表是在這裏:http://www.asciitable.com/
你可以看到&是十六進制26 - 所以你需要的是M%26M
這並不只適用在URL中的符號,但全部爲reserved characters。其中的一些包括:
# $ & + ,/: ; = ? @ [ ]
的想法是一樣在HTML文檔中編碼&
,但上下文已經改變是URI內,除了是在HTML文檔中。因此,百分比編碼可以防止兩個上下文內部的解析問題。
這個地方很容易派上用場,當你需要在另一個URL中放置一個URL。例如,如果你想在Twitter發佈狀態:
http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)
有很多保留字符在我的鳴叫即?'():/
,所以我編碼的status
URL參數的整體價值。這在使用具有郵件正文或主題的mailto:
鏈接時也很有用,因爲您需要編碼body
和subject
參數以保持換行符,&符號等完好。
當從保留集中的字符(一個「保留字符」)具有 特殊含義(一個「保留的目的」)在一定的範圍內,和一個URI 方案說,這是必要使用該字符對於其他一些 的用途,那麼字符必須是百分比編碼的。編碼百分比 保留字符包括將字符轉換爲其相應的ASCII字節值,然後將該值表示爲 一對十六進制數字。然後在URI 中使用用作轉義字符的百分號 (「%」)前面的數字來代替保留字符。 (對於非ASCII字符,通常將其轉換爲UTF-8中的字節序列,然後每個字節 的值如上所示。)保留字符「/」爲 示例,如果在「路徑「組件具有特殊的含義,即在路徑段之間作爲分隔符。如果根據給定URI方案的 ,「/」需要位於路徑段中,則必須在段中使用三個 字符「%2F」或「%2f」,而不是原始的 「/」。
http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters
在上面的列表中,'! '()*'不是使用'encodeURIComponent'編碼的URL。 –
// this may help if someone want by php
$variable ="candy_name=M&M";
$variable = str_replace("&","%26",$variable);
如果你不能使用任何的庫來編碼值, http://www.urlencoder.org/或http://www.urlencode-urldecode.com/或...
只需輸入你的價值 「M & M」,而不是完整的網址;-)
: - %26不適合我。還有其他解決方案嗎? – Sanjiv
@Sanjiv:「不工作」是什麼意思? – Blender
當我將&替換爲%26時,它仍然顯示相同的錯誤 - 從客戶端(&)檢測到潛在危險的Request.Path值。' – Sanjiv