HTML <abc> vs&lt; 1234&gt; </abc>中的无效标记

时间:2014-02-27 11:10:43

标签: html web

我正在写一个简单的网页。我想在页面内打印<abc><1234>。为什么<1234>不打印<abc>?我知道<abc>是无效的标签,这就是为什么它没有呈现。但是<1234>呢?

4 个答案:

答案 0 :(得分:2)

你必须这样做:

and &lt;1234&gt;

使用HTML实体。

&lt; = <
&gt; = >

使用它们会告诉HTML您希望<>按原样显示,而不是<中的><html> }

DEMO

P.S。:Here's a list of them.

答案 1 :(得分:2)

这取决于浏览器将HTML解析为显示为网页的格式。

通常,HTML标记必须以字母开头。因此,浏览器尝试解析为有效标记(因此隐藏它),但不识别&lt; 1234&gt;因此保持不变。

编辑:

正如@Arkana在下面指出的那样,我在HTML规范中没有看到任何特别禁止使用数字启动HTML标记的内容。我最好的猜测是,因为no (currently valid) HTML tags actually do start with a number,浏览器的解析器根据HTML4规范IDs and Names follow的相同规则忽略这些标记。

答案 2 :(得分:1)

在XHTML和HTML5中(即使在HTML序列化中),<abc><123>都无效。在HTML 4.01中,<123>有效,但不推荐,它只是表示这五个数据字符。

浏览器中最重要的是它们如何解析HTML文档。在HTML5 CR中有一个尝试半正式的描述,但它有点难读。底线是<触发特殊解析:如果下一个字符是字母,则数据被解析为HTML标记;否则,<以及之后的数据将被视为普通数据字符。

当解析了<abc>之类的标签时,现代浏览器会在文档树中构建一个元素节点 - 即使标签无效且标签名称根本不为浏览器所知。如果没有结束标记<abc>,则该节点包含文档中的所有其余标记。但是对于名称未知的元素节点,没有默认样式,也没有默认操作。你不会注意到它的存在,除非你试图用它做一些事情(比如把abc { color: solid red }放在样式表中)。

从技术上讲,可以说差异的原因是“a”是名称起始字符(可能在标记名称中显示为第一个字符),而“1”则不是。

最安全的做法是始终将内容中的“&lt;”字符转义(stylescriptxmp元素除外,这些元素具有自己的规则){{1 }}。无需转义“&gt;”,但如果需要,为了对称,您可以将其转义为&lt;

答案 3 :(得分:0)

无法识别的元素被添加到DOM中以实现向前兼容性(可以使用CSS / JS增强它们)。元素名称可能不以数字开头,因此它们不会添加到DOM中,错误恢复会将它们视为文本。

如果您想将&lt;&gt;作为数据而不是标记,请使用<>