我经常在 XML 和 HTML 标记中看到结束斜杠之前有一个空格。 XHTML 换行符可能是典型的示例:
<br />
而不是:
<br/>
这个空间似乎是多余的。其实我觉得这是多余的。
写这个空间的原因是什么?
我读到该空间解决了一些“向后兼容性问题”。哪些向后兼容性问题?这些问题是否仍然相关,或者我们是否仍然为了 IE3 兼容性而添加额外的空格?是否存在对此有明确答案的规范?
如果不向后兼容,那么是可读性问题吗?类似于大括号辩论?
void it_goes_up_here() {
int no_you_fool_it_goes_down_there()
{
我当然可以尊重不同的风格观点,所以我会很高兴得知撰写空间只是一个品味问题。
答案是人们希望遵守XHTML1.0规范的附录C。仅当您“将 XHTML 作为文本/html 提供”时才需要执行此操作。大多数人都会这样做,因为 XHTML 的真实 MIME 类型(application/html+xml)在 Internet Explorer 中不起作用。 当前浏览器不关心该空间。浏览器对这些事情非常宽容。
过去需要空格来确保 HTML 解析器将尾部斜杠视为无法识别的属性。
,并使用Netscape 4.80显示文档的屏幕截图
data:text/html,<title>space</title>foo<br />bar
(左上角,呈现换行符)和
data:text/html,<title>no space</title>foo<br/>bar
(左下角,忽略换行符)。
作为答案发布以显示图片
切线相关:事实上,我有一个冗长的答案,确定了古代浏览器在被误解的 SGML 规范中这种不当行为的原因(以及由此产生的包含空格的建议),即
SGML Null End Tag (NET)(其中 1<tag/2/3
等于
1<tag>2</tag>3
,所以1<tag/>2
实际上意味着1<tag>>2
),但我不仅无法找到良好的证据和标准的具体版本,我什至无法掌握正确的符合标准的行为。可供参考的原始链接很少:
(现在无法重现,但支持 Lee Kowalkowski 关于受此影响的多个浏览器的声明。)
NET "/>"
您很接近 - 这是针对 Netscape 4 的。
看到其他合理化很有趣,但这就是它的全部目的。
今天我不再使用空白,因为我从来没有遇到过没有空白的问题。
<img src=http://myunquotedurl.com/image.jpg />
与
<img src=http://myunquotedurl.com/image.jpg/>
这可能看起来很小,但看看如果没有空间它能做什么。机器人不会知道斜杠是 url 的一部分还是结束标记的一部分。