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

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

),换行符(
)或回车符/换行符对.所有换行符构成空白区域.
并且空白区域仅分隔单词并且白色空间序列被折叠:
对于除了
PRE白色空间序列之外的所有HTML元素,单独的"单词"(我们在这里使用术语"单词"表示"非空白字符的序列").[...][...]
注意,源文档中的单词之间的一系列空白空间可能导致完全不同的渲染的字间间隔(除了
PRE元素的情况).特别是,用户代理应在生成输出字间空间时折叠输入空格序列.[...]
这意味着换行符不能用普通字符表示.虽然Unicode中有某些特殊字符可以明确地分隔行和段落,但它们也没有指定在HTML中执行此操作:
需要注意的是,虽然

和
在[ISO10646]中定义明确地分开行和段落,分别为这些不构成HTML换行符[...]
这意味着没有普通字符或普通字符序列来标记HTML中的换行符.这就是为什么有BR元素的原因.
现在,如果要使用&br;而不是<br>,则只需要声明实体br来表示值<br>:
<!ENTITY br "<br>">
Run Code Online (Sandbox Code Playgroud)
将此附加实体命名为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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20956 次 |
| 最近记录: |