为什么需要HTML字符实体?

时间:2009-06-19 02:19:12

标签: html xml xhtml encoding standards

为什么需要HTML字符实体?他们有什么好处?我没有看到这一点。

6 个答案:

答案 0 :(得分:22)

两件主要的事情。

  1. 它们允许您使用当前字符集中未定义的字符。例如,您可以合法地使用ASCII作为字符集,并且仍然包含任意Unicode字符直播实体。
  2. 他们让你引用HTML赋予特殊意义的字符,正如Simon所说。

答案 1 :(得分:14)

1 &lt; 2”可让您在页面中添加“1 < 2”。

答案很长:

由于HTML使用“<”打开代码,因此如果您希望将其作为文字输入,则不能只输入“<”。因此,您必须在我的页面中说“我想要文本 <”。设计HTML(或者实际上是SGML,HTML的前身)的人决定使用“& 某些东西 ;”,所以你也可以放置像非破坏空间这样的东西:'{ {1}}'(未折叠或允许换行的空格)。当然,现在你需要一种方式来说'&nbsp;',所以你得到'&'...

答案 2 :(得分:7)

除了&amp;&lt;&gt;&quot;以及可能&nbsp;之外,它们不是。对于所有其他角色,只需使用UTF-8。

答案 3 :(得分:4)

在SGML和XML中,它们不仅仅适用于角色。它们是通用的包含机制,它们用于特殊字符只是众多案例中的一种。

<!ENTITY signature "<hr/><p>Regards, <i>&myname;</i></p>">
<!ENTITY myname "John Doe">

这种实体对网站没用,因为它们只能在XML模式下工作,如果不在浏览器配置中启用“验证”解析模式,就不能使用外部DTD文件。


实体可以递归扩展。这允许使用XML进行拒绝服务攻击,称为“Billion Laughs Attack”。


Firefox在内部使用实体(在XUL等中)用于国际化和品牌无关的消息(以使Flock和IceWeasel的生活更轻松):

<!ENTITY hidemac.label "Hide &brandShortName;">
<!ENTITY hidewin.label "Hide - &brandShortName;">

在HTML中,您只需&lt;&amp;&quot;即可避免文本和标记之间存在歧义。

所有其他实体基本上都被Unicode编码废弃,并且仅仅作为便利性(但是一个好的文本编辑器应该有可以替换它们的宏/片段)。


在XHTML中,除了少数几个实体之外的所有实体都存在问题,因为无法使用独立的XML解析器(例如&nbsp;将无效)。

要解析所有需要验证 XML解析器(选项通常称为“解析外部”)的XHTML实体,这些实体较慢且需要设置DTD目录。如果您忽略或搞砸了DTD目录,您将参与DDoS of W3C servers

答案 4 :(得分:3)

字符实体用于表示为HTML for.ex.保留的字符。 &lt;,&gt;,/,&amp;等,如果你想在你的内容中表示这些字符你应该使用字符实体,这将有助于解析器区分内容和标记

答案 5 :(得分:1)

您使用实体来帮助解析器区分何时应将字符表示为HTML,以及您真正想要向用户显示的内容,因为HTML将为自己保留一组特殊的字符。

以HTML格式输入

  

我的意思不是那样&lt; / sarcasm&gt;

会导致“&lt; / sarcasm&gt;”标签消失,

e.g。

  

我不是那个意思

因为HTML没有这样定义的标签。在这种情况下,使用实体将允许文本正确显示。

e.g。

  

不,真的! &安培; LT /讽刺&安培; GT;

给出

  

不,真的! &LT; /讽刺&GT;

根据需要。