2009-01-12 42 views
91

这一直困扰我一段时间。随着UTF-8作为Web开发事实上的标准的出现,我不确定在哪些情况下我应该使用html实体,哪些应该只使用UTF-8字符。何时应该使用HTML实体

例如:破折号,符号等

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

+0

请注意,PHP中的htmlentities()会做什么? – 2009-01-12 19:55:29

+0

阅读答案和评论,在我看来,还没有一个普遍的规则支持这个或那个,答案仍然是*它取决于*。 – 2011-03-29 12:15:52

回答

63

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

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

根据我收到的意见,我进一步研究了这一点。目前看来,的最佳做法是放弃使用HTML实体并使用实际的UTF-8字符代替。列出的原因如下:

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

只要您的页面的编码设置为UTF-8,您应该使用实际的字符而不是HTML实体。我读到这个话题几份文件,但最有帮助的是:

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

维基百科是一个伟大的案例研究 应用程序,最初使用 ISO-8859-1,但当转换为UTF-8时, 变得太笨重,以至于无法支持 外语。 机器人现在 实际经历的文章和 转换字符实体他们 对应的真实人物为 着想的用户友好性和 可搜索

那篇文章还给出了一个很好的涉及中文编码的例子。下面是懒惰起见缩写例如:

UTF-8:

這兩個字是甚麼意思

HTML实体

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

的UTF-8和HTML实体编码对我来说都没有意义,但至少UTF-8编码是可识别为外语,并且它将在编辑框中正确显示。文章接着说下面的有关HTML实体编码版本:

极为不便,对于我们这些 的究竟是谁知道 实体是什么性质的,完全不知所云 给谁不差的用户!即使是 更方便用户使用, “易懂”的字符实体,如 & theta;将留下对 用户不感兴趣的学习HTML 挠头。如果他们在编辑框中看到θ, 他们会知道它是一个特殊的 字符,并相应地对待它, 即使他们不知道如何编写 这个字符本身。

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

+2

这应该是被接受的答案。 – 2015-03-05 00:24:51

+0

这个答案非常有帮助。但为了澄清,为了我自己的理解:在声明为UTF-8字符集的HTML文档中使用`&entity;`语法没有任何风险或无效,是正确的?虽然由于您列出的原因,普通的UTF-8字符更好,但在同一个文档中仍然没有一些HTML实体与他们并排的问题? – 2016-06-18 15:54:20

+0

@JacobFord正确地说,混合使用UTF-8字符的HTML实体没有风险或无效,只是可能会让读者感到困惑。 – 2016-07-13 20:28:34

2

如果你的页面在utf-8中正确编码,你应该不需要html实体,直接使用你想要的字符。

4

实体可能会向您购买一些与无法正确理解编码的大脑死亡客户端的兼容性。我不认为这包括任何当前的浏览器,但你永远不知道其他类型的程序可能会给你带来什么。

更加有用,不过,是HTML实体保护你从自己的错误:如果您错误地配置在服务器上的东西,你最终服务于一个页面的HTTP标头,说,这是ISO-8859-1META标签,上面写着这是UTF-8 ,至少你的& mdash; es将始终工作。

4

我不会使用UTF-8处理视觉上容易混淆的字符。例如,很难区分一个空格与一个空格,尤其是一个非空格的空格。对于这些字符,绝对使用实体。

对于易于直观理解的字符(如上面的中文示例),请继续并使用UTF-8(如果您喜欢)。

2

所有以前的答案对我有意义。

此外:它主要取决于您打算使用的编辑器和文档语言。作为编辑的最低要求是它支持文档语言。这意味着,如果您的文字是日文,请小心使用不显示它们的编辑器(即文档本身没有实体)。如果是英文的话,你甚至可以使用旧的类似vim的编辑器,并且只使用相对较少的&副本的实体;和朋友。 当然:& gt; for>和其他HTML特殊项目仍然需要转义。 不过,即使有其他的Latin-1语言(德语,法语等)的写作ä是在你知道哪里痛......

此外,我亲自写的不可见的字符,其正在寻找类似的实体和那些standard-ascii,因此很容易混淆。例如,u1173(看起来像一些字符中的短划线)或u1175,看起来像竖条。我会在任何情况下使用实体。

4

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

如果从/到UTF-8的字符集转换不是如此大的不可靠混乱(你总是偶然发现一些字符和一些不能正确转换的工具),使用UTF-8进行标准化将是一条可行的路。

4

个人而言,我做的一切都在UTF-8,因为很长一段时间,但是,在HTML页面中,你总是需要符号(&),比(>)大,小则(<)字符转换为等效的实体,& amp ;, & gt;和& lt;另外,如果你打算使用utf-8文本做一些编程,有几件事值得注意。

  • XML在使用实体时需要一些额外的行来验证。
  • 一些图书馆与utf-8不兼容。例如,某些Linux发行版中的PHP在其正则表达式库中全面支持utf-8。
  • 由于单个实体使用许多字符,因此限制使用html实体的文本中的字符数量会比较困难。另外总有将实体裁减一半的风险。
相关问题