2013-05-18 51 views
119

我想發送一個包含與&字符串的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\\ 

我使用手動網址,所以我只需要正確的字符。

我不能使用任何庫。如何做呢?

回答

219

他們需要的是百分比編碼:

> encodeURIComponent('&') 
"%26" 

所以你的情況,該網址看起來像:

http://www.mysite.com?candy_name=M%26M 
+1

: - %26不適合我。還有其他解決方案嗎? – Sanjiv

+0

@Sanjiv:「不工作」是什麼意思? – Blender

+1

當我將&替換爲%26時,它仍然顯示相同的錯誤 - 從客戶端(&)檢測到潛在危險的Request.Path值。' – Sanjiv

2

您可以將%字符用於URL中不允許的'escape'字符。見RFC1738

ASCII值的表是在這裏:http://www.asciitable.com/

你可以看到&是十六進制26 - 所以你需要的是M%26M

27

這並不只適用在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:鏈接時也很有用,因爲您需要編碼bodysubject參數以保持換行符,&符號等完好。

當從保留集中的字符(一個「保留字符」)具有 特殊含義(一個「保留的目的」)在一定的範圍內,和一個URI 方案說,這是必要使用該字符對於其他一些 的用途,那麼字符必須是百分比編碼的。編碼百分比 保留字符包括將字符轉換爲其相應的ASCII字節值,然後將該值表示爲 一對十六進制數字。然後在URI 中使用用作轉義字符的百分號 (「%」)前面的數字來代替保留字符。 (對於非ASCII字符,通常將其轉換爲UTF-8中的字節序列,然後每個字節 的值如上所示。)保留字符「/」爲 示例,如果在「路徑「組件具有特殊的含義,即在路徑段之間作爲分隔符。如果根據給定URI方案的 ,「/」需要位於路徑段中,則必須在段中使用三個 字符「%2F」或「%2f」,而不是原始的 「/」。

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

+2

在上面的列表中,'! '()*'不是使用'encodeURIComponent'編碼的URL。 –

0
// this may help if someone want by php 
$variable ="candy_name=M&M"; 
$variable = str_replace("&","%26",$variable);