我可以在html中使用未编码的&符号(&)吗?

Pet*_*ter 10 html html-entities ampersand

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

在我的情况下,我必须将xml过滤器呈现为html(使用xsl).有时masterdata使用html-enitites allready(例如; é在法语单词中)所以我必须使用'disable-output-escaping ='yes'),以避免双重编码.

最简单的解决方案是禁用输出一起转义,所以我从不冒双重编码的风险.

错过这个masterdata编码的唯一字符是&符号.但是,当我解析他们'原始'时(所以,而不是&所有的浏览器似乎都没问题).

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

Raz*_*zor 8

这取决于

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

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

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


Jon*_*Jon 8

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

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

由于更难以手动检测和解释这些情况,而不是替换所有不属于实体(例如正则表达式)的&符号,您应该真正执行后者.

  • 浏览器不必*猜测*,因为有一个规范,至少在 HTML5 中是这样 (2认同)