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

时间:2012-06-27 07:44:46

标签: html html-entities ampersand

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

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

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

错过此masterdata编码的唯一字符是&符号。但是,当我将它们解析为“原始”时(因此而不是&所有浏览器似乎都可以使用它。

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

3 个答案:

答案 0 :(得分:8)

取决于

我可以在here

找到关于此主题的最佳研究

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

  

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

答案 1 :(得分:8)

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

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

由于手动检测和解释这些案例比更换所有不属于实体(例如正则表达式)的&符号更难以实现后者。

答案 2 :(得分:4)

请参阅Do I really need to encode '&' as '&'?

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