【问题标题】:ampersand in email address (href)电子邮件地址中的 & 号 (href)
【发布时间】:2011-02-04 18:21:25
【问题描述】:

我正在使用带有 & 符号的电子邮件地址, 用户想要一个“联系我们”链接来打开一条新消息,并填写他们的地址, 我通常使用href,但与号导致这不起作用, 有什么想法吗?

这是我目前拥有的:

<a href="mailto:L&D@gha.org.uk? subject=MessageTitle&amp;" 
        style="font-family: Verdana; font-size: large; font-weight: bold; color: #800000">#GHA Organisation Development</a>

【问题讨论】:

    标签: html html-entities ampersand


    【解决方案1】:

    我有同样的错误。当我通过邮件发送确认电子邮件链接时,会自动添加 &amp。它会导致错误,因为我以纯文本格式发送了邮件,这就是自动添加 &amp 的原因。 所以,在那种情况下,我发送了一封 HTML 格式的电子邮件。然后问题就解决了。

    在我的代码中,我刚刚添加了“mail.IsBodyHtml = true”。用于以 html 格式发送电子邮件。

    【讨论】:

    • 问题与邮件地址中的&符号有关,而不是正文。
    【解决方案2】:

    实际上,这不是一个模棱两可的&,所以使用你建议的HTML是完全有效的。当前接受的答案是不正确的(尽管我同意始终对 & 符号进行编码以避免混淆是个好主意)。

    HTML 规范定义了不明确的 & 符号如下:

    不明确的 & 是一个 U+0026 与字符 (&) 后跟一个或多个字符,范围为​​ U+0030 DIGIT ZERO (0) 到 U+0039 DIGIT NINE (9), U+0061 LATIN SMALL字母 A 到 U+007A 拉丁小写字母 Z 和 U+0041 拉丁大写字母 A 到 U+005A 拉丁大写字母 Z,后跟 U+003B 分号字符 (;),其中这些字符与任何名称都不匹配在命名字符引用部分给出。

    不以分号结尾的实体(如&amp;amp)在属性值中的处理方式不同:

    如果字符引用作为属性的一部分使用,并且匹配的最后一个字符不是 U+003B 分号字符 (;),并且下一个字符是 U+003D 等号字符 (=) 或在 U+0030 数字零 (0) 到 U+0039 数字九 (9)、U+0041 拉丁文大写字母 A 到 U+005A 拉丁文大写字母 Z 或 U+0061 拉丁文小写字母 A 到 U+007A 拉丁文的范围内小写字母 Z,那么,由于历史原因,在 U+0026 与字符 (&) 之后匹配的所有字符都必须不被使用,并且不返回任何内容。

    但这不适用于这里,因为下一个字符是@

    FWIW,我对此进行了彻底的研究,并在这里写下了我的发现:http://mathiasbynens.be/notes/ambiguous-ampersands

    我还创建了an online tool,您可以使用它来检查您的标记中是否存在不以分号结尾的不明确的 & 符号或字符引用,这两者都是无效的。 (目前没有任何 HTML 验证器可以正确执行此操作。)

    【讨论】:

      【解决方案3】:

      使用&amp;amp; 而不是普通的&amp;。您的 href URL 在 HTML 中,因此需要正确转义才能成为有效的 HTML。

      【讨论】:

      • +在外部样式表中设置 CSS 样式,而不是使用内联声明
      • 那是直接交换,&对于 &?
      • @Mathias 这个答案是在没有考虑 HTML5 定义的情况下编写的,只是 HTML4(根据您链接的规范,它需要被转义)。也就是说,即使这可能是严格有效的 HTML5,它仍然确实在实践中会导致问题。
      • @Mathias:不,OP 说 her case 会导致问题,尽管根据 HTML5 是明确的。至于为什么写答案时没有考虑 HTML5:因为当时(2010 年初,差不多两年前!),HTML5 还不相关。
      • @Mathias 由于OP没有说,我不知道它导致了哪个问题。也许 OP 使用 XHTML 文档类型? ......我宁愿不猜测什么时候“逃避&”是一个如此简单和万无一失的指南。
      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2017-07-23
      • 2018-08-21
      • 2013-12-22
      • 2015-04-24
      相关资源
      最近更新 更多