繁体   English   中英

为什么需要HTML字符实体?

[英]Why are HTML character entities necessary?

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

两件主要的事情。

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

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

答案很长:

由于HTML使用“ < ”打开标记,因此如果您希望将其作为文本输入,则不能只输入“ < ”。 因此,您必须有一种方式说“我希望文本 <在我的页面中”。 设计HTML(或实际上是SGML,HTML的前身)的人决定使用' & something ; ',所以你也可以把不间断的空间放在一起:' &nbsp; '(没有折叠或允许换行的空格)。 当然,现在你需要有一种方式说“ & ”,让你获得' &amp; ” ...

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

在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目录,您将参与W3C服务器的DDoS

字符实体用于表示为HTML for.ex.编写的字符。 <,>,/,&etc,如果你想在你的内容中表示这些字符你应该使用字符实体,这将有助于解析器区分内容和标记

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

在HTML中输入字面意思

我不是那个意思</ sarcasm>

会导致“</ sarcasm>”标签消失,

例如

我不是那个意思

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

例如

不完全是! &LT; /讽刺&GT;

不完全是! </讽刺>

如预期的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM