为什么呢? &br;
之类的东西不合适吗?
答案 0 :(得分:32)
HTML实体引用取决于HTML版本,SGML实体或XML实体(HTML从底层技术继承实体)。实体是一种在文档中插入其他地方定义的内容块的方法。
所有HTML实体都是单字符实体,因此与字符引用基本相同(从技术上讲,它们与字符引用不同,但由于没有定义多字符实体,因此区别对HTML没有影响)。
当HTML处理器看到时,例如—
它会将该实体引用的内容替换为适当的实体,具体取决于DTD中的部分:
<!ENTITY mdash CDATA "—" -- em dash, U+2014 ISOpub -->
因此,它将实体引用替换为实体—
,而实体—
又是由字符<br/>
(U + 2014)替换的字符引用。实际上,除非您使用不直接理解HTML的通用XML或SGML处理器,否则这将真正完成一步。
现在,我们将取代您的假设&amp; br;导致换行发生?我们不能使用换行符,或者甚至是鲜为人知的U + 2028 LINE SEPARATOR(在纯文本中的语义与HTML中的<br/>
具有相同的含义),因为它们是空白字符并不重要在大多数HTML代码中,您应该感激的是,如果我们无法在源代码中格式化可读性,那么编写HTML会更加困难。
我们需要的不是实体,而是一种在语义上指示呈现的内容在此时包含换行符的方法。我们还需要不指出任何其他内容(我们已经可以通过开始或结束块元素来指示换行符,但这不是我们想要的)。唯一合理的方法是使一个元素具有完全相同的元素,因此我们有{{1}}元素,其相关标记被放入源代码中。
答案 1 :(得分:21)
标签和字符实体引用存在的原因各不相同 - 字符实体是某些字符的替身(有时需要作为转义序列 - 例如&
的&符号&
),标签是那里有结构。
<br>
标记存在的原因是HTML崩溃了空格。需要有一种方法来指定硬换行符 - 具有的地方有换行符。这是<br>
标记的功能。
虽然U+2028 LINE SEPARATOR
具有相似的含义,但没有单个字符具有此含义,即使它被使用也无济于事,因为它被认为是空白而HTML会崩溃它。
有关此方面的详细信息,请参阅@John Kugelman和@John Hanna的答案。
不完全相关,还有另一个原因导致&br;
字符实体引用不存在:以一种可能有多个字符的方式定义换行符,请参阅HTML 4 spec :
换行符定义为回车符(

),换行符(

)或回车符/换行符对。
字符实体是单字符转义符,因此无法再代表HTML 4 spec:
字符实体引用是引用文档字符集字符的SGML构造。
您将看到所有已定义的字符实体都映射到单个字符。换行符/换行符不能以这种方式干净地映射,因此需要实体而不是字符实体引用。
这就是为什么换行符不能用字符实体引用来表示。
无论如何,只需使用 Enter 键插入换行符就不需要了。
答案 2 :(得分:9)
实体是其他字符或文本位的替身。在HTML中,它们用于表示难以输入的字符(例如{ - 1}}表示“ - ”)或需要转义的字符(—
表示“&amp;”)。假设的&
实体代表什么?
它不能是&br;
或\r
或\n
,因为这些已经很容易输入(只需按Enter键)。您尝试解决的问题是 HTML在大多数情况下折叠空白并将换行视为空格。也就是说,\r\n
不是换行符,它只是像制表符和空格一样的空格。
实体\n
必须由其他一些文本替换。你用什么角色来代表“硬线突破”的概念?标准换行符&br;
恰好是正确的字符,但不幸的是它不适合,因为它被抛入通用的“空白”桶中。您必须重载某些其他控制字符以表示“硬线断开”,或使用某些扩展的Unicode字符。当HTML被设计时,Unicode只是一个新兴的,仍在开发的标准,所以这不是一个选择。
\n
元素是一种简单,直接的方法,可以将“强硬换行”的概念添加到文档中,因为没有字符可以表示该概念。
答案 3 :(得分:6)
在HTML中,所有line breaks都被视为空格:
换行符定义为回车符(

),换行符(

)或回车符/换行符对。所有换行符都构成了空格。
并且white space只会分隔单词并且空格序列会崩溃:
对于除
PRE
之外的所有HTML元素,空格序列将“单词”分开(我们在这里使用术语“单词”表示“非空白字符序列”)。 [...][...]
请注意,源文档中单词之间的一系列空格可能会导致呈现的字间距完全不同(
PRE
元素除外)。特别是,用户代理应在生成输出字间空间时折叠输入空格序列。 [...]
这意味着换行符不能用普通字符表示。虽然Unicode中有某些特殊字符可以明确地分隔行和段落,但它们也没有指定在HTML中执行此操作:
请注意,尽管[ISO10646]中定义了


和

以分别明确地分隔行和段落,但这些不构成HTML中的换行符[...]
这意味着没有普通字符或普通字符序列来标记HTML中的换行符。这就是为什么有BR
element。
现在,如果您想使用&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>
答案 4 :(得分:3)
实体是内容,标签是结构或布局(非常粗略地说)。似乎无论谁制作<br>
标签都认为断线更多地与结构和布局有关而不是与内容有关。无法真正“看到”<br>
我倾向于同意。哦,我正在努力做到这一点,所以随意不同意;)
答案 5 :(得分:3)
HTML是一种标记语言 - 它表示文档的结构,而不是文档应该如何直观显示。以<EM>
标记为例 - 它告诉用户代理他们应该强调放在开始和结束<EM>
标记之间的任何文本。但是,不状态如何应该表示强调。是的,大多数可视化Web浏览器都会将文本放在斜体中,但这只是惯例。其他浏览器(例如单色纯文本浏览器)可以反向显示文本。屏幕阅读器可能会以更响亮的声音读取文本,或更改发音。搜索引擎蜘蛛可能会认为文本比其他元素更重要。
<BR>
标记也是如此 - 它不仅仅是另一个字符实体,它实际上代表了文档结构中的一个中断。 <BR
&gt;它不仅仅是换行符的替代品,而且是文档的“语义”部分以及它的结构。这类似于<H1>
不仅仅是使文本更大更大胆的方式,而且是文档结构化方式的一个组成部分。
答案 6 :(得分:2)
br
元素可以设置样式。你会如何设计HTML实体的样式?因为它们是元素,所以它们更灵活。
答案 7 :(得分:0)
是。 HTML实体更合适,因为break标记不能包含文本,并且行为与换行符非常相似。
但事情并非如此。太晚了。我不能告诉你由于未关闭的中断标记而我必须处理的非XML兼容的HTML文档的数量......