什么时候应该使用HTML实体?


115

这已经使我困惑了一段时间。随着UTF-8成为Web开发中的实际标准,我不确定在哪种情况下应该使用HTML实体,对于哪种情况我应该仅使用UTF-8字符。例如,

  • 破折号(–,&emdash;
  • &符(&,&
  • 3/4分数(¾,¾

请阐明这个问题。将不胜感激。


附带说明一下,PHP中的htmlentities()会做什么?
乔·菲利普斯

在我看来,阅读答案和评论似乎还没有一个普遍的规则来支持一个或另一个,而答案仍然取决于它
Majid Fouladpour 2011年

Answers:


76

如果您的编辑器支持Unicode,则通常不需要使用HTML字符实体。在以下情况下,实体可能会很有用:

  • 您的键盘不支持您需要键入的字符。例如,许多键盘没有破折号或版权符号。
  • 您的编辑器不支持Unicode(几年前很常见,但今天可能不常见)。
  • 您想在源代码中明确说明正在发生的事情。例如,该 代码比相应的空白字符更清晰。
  • 您需要HTML特殊字符转义喜欢<&"

1
很有帮助。谢谢。我使用一个有用的程序来获取不寻常的字符。它称为popchar,由Ergonis制造,但仅适用于
OSX。– allesklar 2009年

3
旁注:Wikipedia仍然强制使用&nbsp;而不是实际的空白字符,部分原因是Firefox将U + 00A0转换为U + 0020形式。因此,在这种情况下使用实体是确保Firefox用户每次编辑源时都不会弄乱源的唯一方法。
乔伊

2
一个很好的总结,但是关于最后一点,它<常常需要转义,而不是>(并且"不需要在属性值内部转义)。
Jukka K. Korpela

保留&nbsp;的另一个原因 是这样,您可以在HTML页面上显示多个空格。
zylstra

因此,&amp;应始终使用而不是&?是否有一个原因?
普罗米修斯

116

根据收到的评论,我对此进行了进一步的研究。目前看来,最佳做法是放弃使用HTML实体,而改用实际的UTF-8字符。列出的原因如下:

  1. 对于那些了解字符含义并知道如何键入字符的人来说,UTF-8编码更易于阅读和编辑。
  2. 对于不懂UTF-8编码的人来说,UTF-8编码和HTML实体编码一样难以理解,但是它们具有呈现为特殊字符的优点,而不是难以理解的十进制或十六进制编码。

只要页面的编码正确设置为UTF-8,就应该使用实际字符而不是HTML实体。我阅读了有关此主题的一些文档,但最有帮助的是:

UTF-8:字符编码的秘密文章:

对于最初使用ISO-8859-1的应用程序来说,Wikipedia是一个很好的案例研究,但是当它变得过于笨拙以致无法支持外语时,便切换为UTF-8。Bot现在实际上将浏览文章并将字符实体转换为它们相应的真实字符,以便于用户友好和可搜索

那篇文章还给出了一个很好的例子,涉及中文编码。这是出于懒惰的缩写示例:

UTF-8:

這兩個字是甚麼意思

HTML实体

&#36889;&#20841;&#20491;&#23383;&#26159;&#29978;&#40636;&#24847;&#24605;

UTF-8和HTML实体编码对我来说都是没有意义的,但是至少UTF-8编码可以识别为外语,并且可以在编辑框中正确呈现。本文继续对HTML实体编码版本说以下内容:

对于我们当中那些真正知道角色实体是什么的人来说,这极为不便,而对于那些不知道这些角色的贫穷用户来说,这是完全不明白的!甚至是稍微更人性化的“难以理解”的字符实体,例如&theta;。会让对学习HTML不感兴趣的用户挠头。另一方面,如果他们在编辑框中看到θ,他们就会知道这是一个特殊字符,即使他们自己不知道如何写该字符,也要相应地对待它。

正如其他人指出的那样,对于保留的XML字符(与号,小于号,大于号),您仍然必须使用HTML实体。


这个答案很有帮助。但是请澄清一下,以我自己的理解:&entity;在带有已声明的UTF-8字符集的HTML文档中使用语法没有任何风险或无效,对吗?尽管出于您列出的原因,普通的UTF-8字符更好,但在同一文档中仍然有一些HTML实体并没有问题吗?
雅各布·福特

@JacobFord对,将HTML实体与UTF-8字符混合使用不会带来风险或无效,只会使阅读源的人感到困惑。
威廉·布伦德尔

5

对于不会在视觉上造成混淆的字符,我不会使用UTF-8。例如,很难将破折号和减号区分开,尤其是将不间断的空格与空格区分开。对于这些字符,一定要使用实体。

对于视觉上容易理解的字符(例如上述中文示例),请继续使用UTF-8(如果您愿意)。


5

就个人而言,很长一段时间以来我都在utf-8中执行所有操作,但是,在html页面中,您始终需要将与号(&),大于(>)和小于(<)字符转换为它们的等效实体&amp ;、 &gt; 和&lt;

另外,如果您打算使用utf-8文本进行一些编程,则需要注意一些事项。

  • 使用实体时,XML需要一些额外的行来进行验证。
  • 某些库不能与utf-8配合使用。例如,某些Linux发行版中的PHP在其正则表达式库中放弃了对utf-8的完全支持。
  • 限制使用html实体的文本中的字符数比较困难,因为单个实体使用许多字符。此外,始终存在将实体减半的风险。

这是非常小的要点,但是不需要编码大于(>),而小于(<)。
Codemonkey

4

实体可能会为您与无法正确理解编码的大脑瘫痪的客户提供一些兼容性。我不认为它会包含任何当前的浏览器,但是您永远都不知道还有哪些其他类型的程序可以为您服务。

不过,更有用的是HTML实体可以保护您免受自己的错误的影响:如果您在服务器上配置错误,最终将为页面提供HTTP标头(标为)ISO-8859-1META标记为标UTF-8(至少)。将始终有效。


5
但是,您可以提出相反的论点- &mdash即使标头配置不正确,也可以正确显示es,从而更难检测到问题。
Pekka 2013年

4

当您要生成内容(要(动态)包含在具有(几种)不同编码的页面中)时,HTML实体很有用。例如,我们的白标内容同时包含在ISO-8859-1和UTF-8编码的网页中...

如果字符集从UTF-8转换到UTF-8的麻烦不是那么大(您总是偶然发现一些字符和一些无法正确转换的工具),那么就可以采用UTF-8标准化。



2

先前的所有答案对我来说都是有意义的。

另外:这主要取决于您打算使用的编辑器和文档语言。对编辑器的最低要求是它支持文档语言。这就是说,如果您的文字是日语,请当心不要使用不显示文字的编辑器(即文档本身没有实体)。如果是英文,您甚至可以使用类似vim的旧编辑器,并且仅将实体用于相对很少的&copy;。和朋友。当然:&gt; for和其他HTML特殊功能仍需要转义。但是,即使使用其他拉丁语1语言(德语,法语等),书写ä还是很痛苦,因为您知道在哪里...

另外,我亲自为看不见的字符以及看起来与标准ascii类似的字符编写实体,因此很容易混淆。例如,有u1173(在某些字符集中看起来像破折号)或u1175,看起来像是竖线。无论如何,我都会使用实体。


&gt; >不需要,您可以使用>。&lt; 但是需要<。
Codemonkey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.