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

我可以在html中使用未编码的符号(&;)吗?,html,html-entities,ampersand,Html,Html Entities,Ampersand,我正在建立一个网站,在那里我必须使用不太完美的主数据(我想我不是唯一一个:-) 在我的例子中,我必须将xml过滤器呈现为html(使用xsl)。有时主数据使用html enities allready(例如法语中的é;),因此我必须在那里使用“disable output escaping='yes')以避免双重编码 最简单的解决方案是同时禁用输出转义,所以我从不冒双重编码的风险 此主数据唯一未编码的字符是与符号。但是当我将它们解析为“原始”(因此,而不是&;时,所有浏览器似乎

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

在我的例子中,我必须将xml过滤器呈现为html(使用xsl)。有时主数据使用html enities allready(例如法语中的
é;
),因此我必须在那里使用“disable output escaping='yes')以避免双重编码

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

此主数据唯一未编码的字符是与符号。但是当我将它们解析为“原始”(因此,而不是
&;
时,所有浏览器似乎都能接受它


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

这取决于

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

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

不明确的“与”是U+0026“与”字符(&),即 后跟U+0030位零(0)范围内的一个或多个字符 至U+0039第九(9)位,U+0061拉丁文小写字母A至U+007A拉丁文 小写字母Z和U+0041拉丁文大写字母A至U+005A拉丁文 大写字母Z,后跟U+003B分号字符(;),其中 这些字符与命名列表中给定的任何名称都不匹配 字符引用部分


AFAIK裸符号在HTML中是非法的。因此,让我们看看后果:

  • 您现在依赖浏览器的功能来检测问题并从中正常恢复。请注意,要做到这一点,浏览器必须猜测:
    &
    是“清晰的”一个符号,后面跟一个空格,
    ©;
    显然是版权的象征。但是文本片段
    edit©
    呢?我现在使用的浏览器把它弄坏了
  • 如果您使用的是XHTML,或者内容将被插入到XML文档中,那么结果将是一个硬解析器错误
由于手动检测和解释这些情况比替换所有不属于实体的符号(比如用正则表达式)更困难,因此您应该真正做到后者。

请参见


总而言之:是的,你可以,但严格来说它是不合法的(HTML5除外,在HTML5中,只要它不“看起来”像一个角色实体,它就是合法的).

你有一个非常尴尬的情况要处理-我的同感。你能在XSL转换之前预处理主数据吗?你可以使用一个简单的regexp,用
&;
替换任何空的符号,这样在输入到XSL之前就可以对输入进行规范化。@Peter现在,询问者可以单方面地自行关闭问题是重复的。我建议这样做。@Mark我收到了你的评论通知,我认为现在状态还可以了?@Peter yep,看起来不错。浏览器不必猜测,因为这有一个规范,至少在HTML5中是这样的,感谢你指出链接帖子的作者urlMatthias Bynens是一个强大且高度活跃的开发人员。任何关于HTML、ECMAScript和CSS规范的边缘案例,Matthias很有可能以迂腐的细节来描述它,就像他在这里所做的那样。