11

我正在建立一个网站,我必须使用不那么完美的主数据(我想我不是唯一一个:-))

就我而言,我必须将 xml 过滤器呈现为 html(使用 xsl)。有时,masterdata 已经使用 html-enitites(例如é,法语单词),所以我必须在那里使用'disable-output-escaping='yes')以避免双重编码。

最简单的解决方案是一起禁用输出转义,因此我永远不会冒双重编码的风险。

唯一缺少此主数据编码的字符是 & 符号。但是当我解析它们'原始'时(所以不是&所有的浏览器似乎都可以接受它。

所以问题是:在 html 中使用未编码的 & 符号有什么后果?

4

3 回答 3

8

这取决于

我在这个主题上看到的最好的研究可以在这里找到

在 HTML5 中,您应该转义所有不属于以下类别的 & 符号:

不明确的 & 符号是 U+0026 与字符 (&) 后跟一个或多个字符,范围为​​ U+0030 数字零 (0) 到 U+0039 数字九 (9)、U+0061 拉丁小写字母 A 到U+007A 拉丁小写字母 Z 和 U+0041 拉丁大写字母 A 到 U+005A 拉丁大写字母 Z,后跟 U+003B 分号字符 (;),其中这些字符与命名字符引用部分。

于 2012-06-27T07:51:09.900 回答
8

AFAIK 裸 & 符号在 HTML 中是非法的。有了这个,让我们看看后果:

  • 您现在依靠浏览器的功能来检测问题并从容地恢复。请注意,为了做到这一点,浏览器必须猜测: “显然”是一个 & 后跟一个空格,并且©显然是版权符号。但是文本片段edit&copy呢?我现在使用的浏览器会破坏它。
  • 如果您正在使用 XHTML,或者如果内容将被插入到 XML 文档中,那么结果将是一个硬解析器错误。

由于手动检测和解释这些情况比替换所有不属于实体的&符号(例如使用正则表达式)更困难,因此您应该真正做后者。

于 2012-06-27T07:52:14.870 回答
4

请参阅我真的需要将“&”编码为“&”吗?

总结一下:是的,你可以,但严格来说它是不合法的(除了在 HTML5 中它是合法的,只要它不“看起来”像一个字符实体)。

于 2012-06-27T07:53:40.717 回答