2012-06-27 32 views
9

我正在建立一个网站,我必须使用少于完美的masterdata(我猜我不是唯一一个:-))我可以在html中使用未编码的&符号(&)吗?

在我的情况下,我必须呈现一个XML过滤到HTML(使用XSL)。有时masterdata已经使用了html-enitites(例如,用法语单词é),所以我必须在那里使用'disable-output-escaping ='yes'),以避免重复编码。

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

错过此主数据编码的唯一字符是&符号。但是,当我分析他们的“原始”(因此而&不是&所有的浏览器似乎是好它

所以问题:是什么在HTML中使用未编码&符号的consequenses

+0

你有一个非常尴尬的处境 - 我的同情心。您可以在XSL转换之前预处理主数据吗?你可以用'&'代替任何纯粹的&符号,使用一个简单的正则表达式,以便在输入到达XSL之前对输入进行规范化。 –

+0

@彼得现在有可能让提问者单方面自我关闭一个重复的问题。我建议这样做。 –

+0

@Mark我收到您的评论通知,我认为现在状态正常吗? – Peter

回答

8

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

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

由于手动检测和解决这些情况比替换不属于实体的所有&符号(比如用正则表达式)要困难得多,所以应该真正做到后者。

+1

浏览器不必*猜*因为有一个规范,至少在HTML5 – Razor

7

这要看?

我看到关于这一主题的最好的研究可以发现here

在HTML5中,你应该逃避所有不以下按类别属于&符号的:

的暧昧符号是一个U + 0026 AMPERSAND字符(&),其随后在范围内的一个或多个字符 U + 0030数字零(0) 到U + 0039数字9(9),U +0061拉丁文小写字母A到U + 007A拉丁文 小写字母Z和U + 0041拉丁大写字母A到U + 005A拉丁文 大写字母Z,后跟一个U + 003B SEMICOLON字符(;),其中 这些字符不匹配 字符引用部分中给出的任何名称。

+0

Matthias Bynens是该链接文章的作者,是一位令人敬畏且高度活跃的开发人员。关于HTML,ECMAScript和CSS规范的边缘情况,您有任何有趣的问题,Matthias已经以迂腐的细节描述了这一点,就像他在这里所做的那样。 –

相关问题