为什么是HTML元素而不是HTML实体?

为什么呢? 不会喜欢的东西 更合适吗?

根据HTML版本,HTML实体引用是SGML实体或XML实体(HTML从底层技术inheritance实体)。 实体是将其他地方定义的内容块插入到文档中的一种方式。

所有的HTML实体都是单字符实体,因此基本上与字符引用相同(从技术上来说,它们与字符引用不同,但是由于没有定义多字符实体,所以对HTML没有影响)。

当一个HTML处理器看到时,例如— 它会根据DTD中的以下部分,用适当的实体replace该实体引用的内容:

 <!ENTITY mdash CDATA "&#8212;" -- em dash, U+2014 ISOpub --> 

所以它将实体引用replace为实体&#8212; 这反过来又是由字符取代的字符引用 (U + 2014)。 实际上,除非您直接使用不能直接理解HTML的通用XML或SGML处理器来完成这个任务,否则这将会一步完成。

现在,我们将取代你的假设, 导致换行发生? 我们不能使用换行符,甚至不知名的U + 2028 LINE SEPARATOR(在纯文本中语义与HTML有相同的含义),因为它们是空格字符,它们是不重要的大多数HTML代码,如果我们无法在源代码中进行可读性格式化,那么您应该感谢您编写HTML代码。

我们所需要的不是一个实体,而是一种从语义上表明所呈现的内容在这一点上包含换行的方式。 我们也不需要指出任何东西(我们已经可以通过开始或者结束一个块元素来指示换行符,但这不是我们想要的)。 这样做的唯一合理的方法就是拥有一个完全意味着的元素,所以我们有元素,其相关的标签被放入源代码中。

一个标签和一个字符实体引用存在不同的原因 – 字符实体是某些字符的替身(有时需要作为转义序列 – 例如&amp;符号& ),结构中有标签。

<br>标记存在的原因是HTML折叠了空格。 需要有一种方法来指定一个硬线断点 – 一个必须换行的地方。 这是标签的function。

虽然U+2028 LINE SEPARATOR具有相似的含义,即使要使用,也不会有任何帮助,因为它被认为是空格,HTML会将其折叠。

请参阅@John Kugelman和@John Hanna的答案,了解更多关于这方面的细节。


不完全相关,还有另外一个原因&br; 字符实体引用不存在:换行符被定义为可能有多个字符,请参阅HTML 4规范 :

换行符被定义为回车符( &#x000D; ),换行符( &#x000A; )或回车符/换行符对。

字符实体是单字符转义,所以不能在HTML 4规范中再次表示:

字符实体引用是引用文档字符集的字符的SGML结构。

您将看到所有已定义的字符实体映射到单个字符。 换行符/换行符不能以这种方式干净地映射,因此需要实体而不是字符实体引用。

这就是换行符不能用字符实体引用表示的原因。

无论如何,只要使用Enter键就可以插入换行符。

实体是其他字符或文本位的替代品。 在HTML中,它们用来表示难以input的字符(例如,“ – ”)或需要转义的字符( &amp; for“&”)。 什么是假想的&br; 实体代表什么?

它不能是\r\n\r\n因为这些已经足够简单了(只需按Enter键)。 您试图解决的问题是HTML在大多数情况下会折叠空白 ,并将换行符视为空格。 也就是说, \n不是换行符,它只是像制表符和空格这样的空格。

一个实体 将不得不由其他一些文字取代。 你用什么性格来expression“强硬路线”的概念? 标准的换行符\n恰好是正确的字符,但不幸的是,它不适合,因为它被扔在通用的“空白”桶中。 你必须重载一些其他控制字符来表示“强行换行”,或者使用一些扩展的Unicode字符。 当deviseHTML时,Unicode只是一个新兴的,仍在发展的标准,所以这不是一个select。

一个<br>元素是一个简单,直接的方法,将“强硬断行”的概念添加到文档中,因为没有人物可以expression这个概念。

在HTML中,所有换行符都被视为白色空格:

换行符被定义为回车符( &#x000D; ),换行符( &#x000A; )或回车符/换行符对。 所有换行符都构成了空格。

而白色空间只是分开的单词和空白序列的崩溃:

对于除PRE以外的所有HTML元素,空白序列都将“单词”分开(我们在此使用术语“单词”表示“非空白字符序列”)。 […]

[…]

请注意,源文档中的单词之间的空白序列可能会导致完全不同的呈现的字间距(除PRE元素外)。 特别是,用户代理应该在生成输出字间空间时折叠input空白序列。 […]

这意味着换行符不能用纯字符表示。 虽然在Unicode中有一些特殊的字符来明确地分隔行和段落,但是它们并没有被指定在HTML中这样做:

请注意,虽然&#x2028;&#x2029; 在[ISO10646]中被定义为分别明确地分隔行和段落,这些不构成HTML中的换行符[…]

这意味着没有简单的字符或简单字符序列来标记HTML中的换行符。 这就是为什么有BR元素 。

现在如果你想使用&br; 而不是<br> ,你只需要声明实体br来表示值:

 <!ENTITY br "<br>"> 

有了这个名为br的额外实体,通用的XML或SGML处理器将会取代每一次出现的实体引用&br; 与它代表的价值( <br> )。 示例文档:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" [ <!ENTITY br "<br>"> ]> <HTML> <HEAD> <TITLE>My first HTML document</TITLE> </HEAD> <BODY> <P>Hello &br;world! </BODY> </HTML> 

实体是内容,标签是结构或布局(非常粗略地说)。 看起来谁做了一个标签决定,打破线更多的是与结构和布局,而不是内容。 不能真正“看到”一个<br>我倾向于同意。 哦,我正在这样做,所以我可以随意不同意;)

HTML是一种标记语言,它代表文档的结构,而不是文档的外观。 以<EM>标签为例 – 它告诉用户代理他们应该强调放置在开始和结束<EM>标签之间的任何文本。 但是,它没有说明应该如何强调这一点。 是的,大多数可视网页浏览器都会将文本以斜体显示,但这只是惯例。 其他浏览器(如单色纯文本浏览器)可能会显示相反的文本。 屏幕阅读器可能会以更响亮的声音阅读文本,或更改发音。 search引擎蜘蛛可能会决定文本比其他元素更重要。

<BR>标签也是如此,它不仅仅是另一个字符实体,它实际上代表了文档结构中的一个中断。 一个<BR不仅仅是换行符的替代,而是文档的“语义”部分以及结构。 这与<H1>不仅仅是使文本更大更大胆的方式类似,而是文档结构的组成部分。

br元素可以被设置,但是。 你将如何devise一个HTML实体? 因为它们是元素,所以它们更加灵活。

是。 一个HTML实体会更合适,因为中断标记不能包含文本,行为很像新行。

但事实并非如此。 太晚了。 我不能告诉你由于未closures的中断标签而必须处理的非XML兼容的HTML文档的数量…