如何在 SendGrid 代码编辑器中包含与号 (&)?

如何在 SendGrid 代码编辑器中包含与号 (&)?

我正在向 SendGrid 模板添加自定义链接。

链接的一部分是一些 URL 查询参数。它们由与号 (&) 分隔,如下所示:

<a href="www.example.com?arg1=foo&arg2=bar">My Link</a>

Sendgrid 不断自动更新上面的字符串,转义字符并创建以下内容:

<a href="www.example.com?arg1=foo&amp;arg2=bar">My Link</a>

这根本不是相同的链接,我希望它不要在我的自定义 html 代码中强制字符转义。

不,这两个链接不一样

const t1 = new URLSearchParams("a=1&amp;b=2");
console.log(t1.get("a")); // 1
console.log(t1.get("b")); // null
console.log(t1.get("amp;b")); // 2

const t2 = new URLSearchParams("a=1&b=2");
console.log(t2.get("a")); // 1
console.log(t2.get("b")); // 2

我怎样才能让 SendGrid 允许我使用 & 符号?

答案1

这是正常的,不会改变 URL 的含义,因为它会在&解析 HTML 文档时自动解码回。

通常,在 HTML 和 XHTML 中,单个 & 符号必须写为“字符实体引用”,以避免与实际 HTML 实体引用(例如“<”或“"”)混淆。所有解析器都会识别命名引用,&amp;尽管诸如这样的变体&#38;也是合法的。

HTML 4

作者应使用“&”(ASCII 十进制 38)代替“&”,以避免与字符引用的开头(实体引用开放分隔符)混淆。作者还应在属性值中使用“&”,因为 CDATA 属性值中允许使用字符引用。

HTML 5

属性值是文本和字符引用的混合,但有一个额外的限制,即文本不能包含歧义的“与”符号。[...]

8.2.4.72. 字符引用状态

如果无法找到匹配项,且临时缓冲区由 U+0026 AMPERSAND 字符 (&) 后跟一个或多个字母数字 ASCII 字符序列以及 U+003B 分号字符 (;) 组成,则会出现解析错误。[...] 如果匹配的最后一个字符不是 U+003B 分号字符 (;),则会出现解析错误。

XHTML 1

为了确保文档与历史 HTML 用户代理和基于 XML 的用户代理兼容,文档中使用的要被视为文字字符的 & 符号必须本身表示为实体引用(例如“ &amp;”)。例如,当 a 元素的 href 属性引用带参数的 CGI 脚本时,必须将其表示为http://my.site.dom/cgi-bin/myscript.pl?class=guest&amp;name=user而不是http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user

相关内容