【问题标题】:Can I use unencoded ampersands (&) in html? [duplicate]我可以在 html 中使用未编码的 & 符号吗? [复制]
【发布时间】:2012-06-28 14:39:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你有一个非常尴尬的情况要处理 - 我的同情。您可以在 XSL 转换之前对主数据进行预处理吗?您可以使用简单的正则表达式将任何裸 & 符号替换为 &,从而在输入到达 XSL 之前对其进行规范化。
  • @Peter 如今,提问者可能会单方面将问题作为重复问题自行关闭。我建议这样做。
  • @Mark 我收到了您的评论通知,我认为现在状态还可以?
  • @Peter 是的,看起来不错。

标签: html html-entities ampersand


【解决方案1】:

视情况而定

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

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

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

【讨论】:

  • Matthias Bynens,链接帖子的作者,是一位强大且高度活跃的开发人员。如果您对 HTML、ECMAScript 和 CSS 规范的边缘案例有任何有趣的问题,Matthias 很有可能像他在这里所做的那样以迂腐的细节写过它。
【解决方案2】:

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

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

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

【讨论】:

  • 浏览器不必猜测,因为至少在 HTML5 中有一个规范
【解决方案3】:

Do I really need to encode '&' as '&'?

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

【讨论】:

  • 感谢指出网址
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2021-10-31
  • 1970-01-01
  • 2012-06-21
  • 2013-10-30
  • 1970-01-01
相关资源
最近更新 更多