代码之家  ›  专栏  ›  技术社区  ›  Pup

为什么需要HTML字符实体?

  •  10
  • Pup  · 技术社区  · 16 年前

    为什么需要HTML字符实体?他们有什么好处?我不明白这一点。

    6 回复  |  直到 16 年前
        1
  •  22
  •   Matthew Flaschen    16 年前

    主要有两件事。

    1. 它们允许您使用当前字符集中未定义的字符。例如,您可以合法地使用ASCII作为字符集,并且仍然包括任意的Unicode字符和Thorugh实体。
    2. 它们允许您引用HTML赋予特殊含义的字符,如Simon所指出的。
        2
  •  14
  •   Simon Buchan    16 年前

    1 &lt; 2 “让你放” 1 < 2 “在你的页面中。

    长回答:

    因为HTML使用' < '要打开标签,不能只键入' < '如果您希望它作为文本。因此,你必须有一种方式来说“我想要 文本 < 在我的页面上。不管是谁设计的HTML(或者实际上是SGML,HTML的前身)决定使用' & 某物 ; '这样,您还可以放置不间断空格之类的内容:' &nbsp; '(未折叠或不允许换行的空格)。当然,现在你得想办法说 & “所以你得到” &amp;

        3
  •  7
  •   Ms2ger    16 年前

    除了 &amp; , &lt; , &gt; , &quot; 而且可能 &nbsp; . 对于所有其他字符,只需使用UTF-8。

        4
  •  4
  •   Kornel    16 年前

    在SGML和XML中,它们不仅仅用于字符。它们是通用的包含机制,对特殊字符的使用只是许多情况中的一种。

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

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


    实体可以递归展开。这允许使用XML进行拒绝服务攻击,称为“十亿笑攻击”。


    火狐在内部(XUL等)使用实体进行国际化和品牌无关的信息(使flock和iceweasel的生活更轻松):

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

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

    所有其他实体基本上都被Unicode编码废弃了,只保留为covenience(但是一个好的文本编辑器应该有可以替换它们的宏/代码段)。


    在XHTML中,除了基本的少数几个实体之外,所有实体都存在问题,因为它们无法与独立的XML解析器(例如 &nbsp; 不会起作用的。

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

        5
  •  3
  •   Rony    16 年前

    字符实体用于表示为.ex编写HTML而保留的字符。 <、>、/、&等,如果要在内容中表示这些字符,应使用字符实体,这将有助于解析器 区分内容和标记

        6
  •  1
  •   futureelite7 Adam Rosenfield    16 年前

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

    用HTML输入

    我不是那个意思

    将导致“</sarcasm>”标记消失,

    例如

    我不是那个意思

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

    例如

    不,真的!&lt;/sarcasm>

    给予

    不,真的!</sarcasm>

    根据需要。