转义URL中的&号

我试图发送一个包含与符号的字符串的GET消息,不知道如何在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\\

我手动使用url,所以我只需要正确的字符。

我不能使用任何库。怎样才能做到呢?

390476 次浏览

它们需要用百分比编码:

> encodeURIComponent('&')
"%26"

所以在你的例子中,URL看起来像这样:

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

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

参见这个引用和更多信息在维基百科上

您可以使用%字符来“转义”url中不允许的字符。看到RFC 1738

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

你可以看到&在十六进制中是26 -所以你需要M%26M。

这不是只适用于指向url中的&号,而是指向所有保留字符。其中包括:

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

其思想与在HTML文档中编码__abc0相同,但是上下文除了在HTML文档中之外,还更改为在URI中。因此,百分比编码可以防止在两个上下文中进行解析的问题。

当你需要把一个URL放到另一个URL里面的时候,这个就会派上用场了。例如,如果你想在Twitter上发布一个状态:

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

在我的Tweet中有很多保留字符,即?'():/,所以我对status URL参数的整个值进行了编码。当使用带有消息体或主题的mailto:链接时,这也很有帮助,因为你需要对bodysubject参数进行编码,以保持换行符、&号等不变。

当保留集中的一个字符(“保留字符”)具有 在特定上下文中的特殊含义(“保留目的”)和URI Scheme表示有必要将该字符用于其他字符 目的,那么字符必须是百分比编码。百分比编码 保留字符包括将字符转换为保留字符 ASCII中对应的字节值,然后将该值表示为 一对十六进制数字。数字,前面有个百分号 (“%”)用作转义字符,然后在URI中使用 代替保留字符。(对于非ascii字符,它是 通常转换为UTF-8的字节序列,然后是每个字节 数值如上所示。)保留字符“/”,用于 例如,如果在URI的“path”组件中使用,则具有特殊 路径段之间的分隔符的含义。如果,根据 给定URI方案,“/”需要在路径段中,然后是三个 字符“%2F”或“%2F”必须在段中使用,而不是raw “/”< / p >。

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

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

$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);

如果你不能使用任何库来编码值, http://www.urlencoder.org/ or http://www.urlencode-urldecode.com/ or…

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

您可以使用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

我想对搅拌机的解决方案添加一个小注释。

您可以执行以下操作:

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"