249

I am trying to send a GET message that contains strings with ampersands and can't figure how to escape the ampersand in the URL.

Example:

http://www.example.com?candy_name=M&M
result => candy_name = M

I also tried:

http://www.example.com?candy_name=M\&M
result => candy_name = M\\

I am using URLs manually, so I just need the correct characters.

I can't use any libraries. How can it be done?

4

8 回答 8

442

它们需要进行百分比编码:

> encodeURIComponent('&')
"%26"

因此,在您的情况下,URL 如下所示:

http://www.mysite.com?candy_name=M%26M
于 2013-05-18T09:12:10.113 回答
43

不仅适用于 URL 中的 & 符号,还适用于所有保留字符。其中一些包括:

 # $ & + ,  / : ; = ? @ [ ]

这个想法与在 HTML 文档中编码 an 相同&,但上下文已更改为在 URI 内,除了在 HTML 文档内。因此,百分比编码可以防止在两个上下文中解析的问题。

当您需要将一个 URL 放在另一个 URL 中时,这会派上用场。例如,如果您想在 Twitter 上发布状态:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)

我的推文中有很多保留字符,即,因此我对URL 参数?'():/的整个值进行了编码。这在使用具有消息正文或主题的链接status时也很有帮助,因为您需要对and参数进行编码以保持换行符、& 符号等完好无损。mailto:bodysubject

当保留集中的字符(“保留字符”)在特定上下文中具有特殊含义(“保留目的”),并且 URI 方案表明有必要将该字符用于其他目的时,则该字符必须是百分比编码的。对保留字符进行百分比编码涉及将字符转换为其对应的 ASCII 字节值,然后将该值表示为一对十六进制数字。然后在 URI 中使用用作转义字符的百分号 ("%") 前面的数字代替保留字符。(对于非 ASCII 字符,一般会转换成其 UTF-8 中的字节序列,然后每个字节值如上所示。) 保留字符“/”,例如,如果在“路径”中使用 URI 的组成部分,具有作为路径段之间分隔符的特殊含义。如果根据给定的 URI 方案,“/”需要在路径段中,则必须在段中使用三个字符“%2F”或“%2f”而不是原始“/”。

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

于 2014-02-11T15:55:01.917 回答
8

尝试使用http://www.example.org?candy_name=M%26M.

另请参阅此参考资料和有关 Wikipedia的更多信息。

于 2013-05-18T09:12:23.143 回答
5

您可以使用 % 字符来“转义” URL 中不允许的字符。请参阅RFC 1738

维基百科页面上给出了 ASCII 值表。

你可以看到&26 是十六进制的——所以你需要 M%26M。

于 2013-05-18T09:17:08.540 回答
4

我想对Blender 的解决方案添加一点评论。

您可以执行以下操作:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M');

输出:

http://example.com?candy_name=M%26M

这样做的好处是,它不仅适用于&,而且适用于任何特殊角色。

例如:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M?><')

输出:

"http://example.com?candy_name=M%26M%3F%3E%3C"
于 2019-10-15T20:29:06.197 回答
2

如果有人想要在 PHP 中使用它,这可能会有所帮助

$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);
于 2015-08-31T08:49:29.063 回答
1

如果您不能使用任何库对值进行编码, 请 http://www.urlencoder.org/http://www.urlencode-urldecode.com/或 ...

只需输入您的值“M&M”,而不是完整的 URL ;-)

于 2016-07-04T13:30:21.493 回答
0

您可以使用此 encodeURIComponent 函数传递您的参数,这样您就不必担心传递任何特殊字符。

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

于 2018-08-10T15:14:31.750 回答