Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么<;br>;一个HTML元素而不是一个HTML实体?_Html - Fatal编程技术网

为什么<;br>;一个HTML元素而不是一个HTML实体?

为什么<;br>;一个HTML元素而不是一个HTML实体?,html,Html,为什么呢?不是像这样的东西吗&br是否更合适?标记和字符实体引用的存在有不同的原因-字符实体是某些字符的替代品(有时需要作为转义序列-例如,对于符号和&),标记用于结构 标记存在的原因是HTML压缩空白。需要有一种方法来指定硬换行符-一个必须有换行符的地方。这是标记的功能 没有一个字符具有这种含义,尽管U+2028行分隔符具有类似的含义,而且即使使用它也没有帮助,因为它被认为是空白,HTML会将其折叠 有关这方面的更多详细信息,请参见和的答案 不完全相关,另一个原因是&br字符实体引用不存在:

为什么呢?不是像
这样的东西吗&br是否更合适?

标记和字符实体引用的存在有不同的原因-字符实体是某些字符的替代品(有时需要作为转义序列-例如,对于符号和
&
),标记用于结构


标记存在的原因是HTML压缩空白。需要有一种方法来指定硬换行符-一个必须有换行符的地方。这是

标记的功能

没有一个字符具有这种含义,尽管
U+2028行分隔符
具有类似的含义,而且即使使用它也没有帮助,因为它被认为是空白,HTML会将其折叠

有关这方面的更多详细信息,请参见和的答案


不完全相关,另一个原因是
&br字符实体引用不存在:换行符的定义方式可以包含多个字符,请参见:

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

字符实体是单字符转义,因此无法在以下情况中再次表示:

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

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

这就是为什么换行符不能由字符实体引用表示的原因


无论如何,不需要它,因为只需使用Enter键即可插入换行符。

是。HTML实体更合适,因为break标记不能包含文本,其行为更像换行符


但事情不是这样的。太晚了。我无法告诉您,由于未关闭的中断标记,我不得不处理多少不兼容XML的HTML文档…

实体是内容,标记是结构或布局(非常粗略地说)。似乎是谁把

作为一个标签,决定了断行更多地与结构和布局有关,而不是与内容有关。无法真正“看到”一个


我倾向于同意。哦,我正在弥补这一点,所以请随意不同意;)

br
元素可以设置样式。如何设计HTML实体的样式?因为它们是元素,所以更加灵活。

实体是其他字符或文本位的替代。在HTML中,它们用于表示难以键入的字符(例如“-”的
)或需要转义的字符(“&”)。假设的
&br实体代表什么

它不能是
\r
\n
\r\n
,因为这些已经足够容易键入(只需按enter键)。您试图解决的问题是,HTML在大多数上下文中压缩空白,并将换行符视为空格。也就是说,
\n
不是换行符,它只是像制表符和空格一样的空白

实体
&br必须由其他文本替换。你用什么字符来表示“强硬路线突破”的概念?标准换行符
\n
正是正确的字符,但不幸的是,它不合适,因为它被抛出到通用的“空白”存储桶中。您必须重载一些其他控制字符来表示“硬线中断”,或者使用一些扩展的Unicode字符。当HTML被设计时,Unicode仅仅是一个新兴的、仍在发展中的标准,所以这不是一个选项



元素是向文档中添加“硬线中断”概念的简单而直接的方法,因为没有字符可以表示该概念。

HTML实体引用是SGML实体还是XML实体(HTML从底层技术继承实体),取决于HTML版本。实体是将别处定义的内容块插入文档的一种方式

所有HTML实体都是单字符实体,因此基本上与字符引用相同(从技术上讲,它们与字符引用不同,但由于没有定义多字符实体,因此这种区别对HTML没有影响)

当HTML处理器看到时,例如
&mdash它根据DTD中的一节,将其替换为该实体引用的内容和相应的实体,该节说明:

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

因此,它将实体引用替换为实体
,它又是一个字符引用,被字符
-
(U+2014)替换。实际上,除非您使用的是不直接理解HTML的通用XML或SGML处理器,否则这实际上是一步完成的

现在,我们用什么来代替您的假设&br;用什么方法导致线路中断?我们不能使用换行符,甚至不太为人所知的U+2028行分隔符(在纯文本中,它的语义与HTML中的

的含义相同),因为它们是空白字符,在大多数HTML代码中并不重要,这是您应该感谢的,因为如果我们不能在源代码中设置可读性格式,那么编写HTML将更加困难

我们需要的不是一个实体,而是一种从语义上指示呈现内容在这一点上包含换行符的方法。我们也不需要指示任何其他内容(我们已经可以通过开始或结束块元素来指示换行,但这不是我们想要的)。onl
<!ENTITY 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>