在URL中转义&符号

时间:2013-05-18 09:07:57

标签: http url web get

我正在尝试发送包含带&符号字符串的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\\

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

我不能使用任何库。怎么办呢?

8 个答案:

答案 0 :(得分:289)

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

> encodeURIComponent('&')
"%26"

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

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

答案 1 :(得分:34)

这不是仅适用于到网址中的&符号,而是适用于所有reserved characters。其中一些包括:

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

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

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

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

我的推文中有很多保留字符,即?'():/,所以我编码了status网址参数的整个值。在使用包含邮件正文或主题的mailto:个链接时,这也很有用,因为您需要对bodysubject参数进行编码,以保持换行符,符号等不变。< / p>

  

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

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

答案 2 :(得分:6)

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

另请参阅this reference以及更多信息on Wikipedia

答案 3 :(得分:2)

您可以使用%字符来“转义”URL中不允许的字符。见[RFC 1738]。

http://www.asciitable.com/上的ASCII值表。

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

答案 4 :(得分:1)

我想对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"

答案 5 :(得分:0)

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

 using UnityEngine;
    using System.Collections;

    public class Mover : MonoBehaviour {


        public float speed;
        // Use this for initialization
        void Start () {
            GetComponent<Rigidbody>().velocity = transform.forward * speed;

        }


    }

答案 6 :(得分:0)

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

只需输入您的价值&#34; M&amp; M&#34;,而不是完整的网址; - )

答案 7 :(得分: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