XHTML strict 解决了啥问题?

Posted

技术标签:

【中文标题】XHTML strict 解决了啥问题?【英文标题】:What problem does XHTML strict solve?XHTML strict 解决了什么问题? 【发布时间】:2010-09-21 16:20:12 【问题描述】:

我真的不明白对 Xhtml 严格的迷恋。内联 javascript 通常需要大量的转义符,以使其与 XHTML 兼容并与 MSIE 5 和 6 半向后兼容。然后是用户输入的 OCD 不足以确保您不会错过任何非法字符.这似乎比它的价值更多的努力。没关系,几乎每个与我一起工作的开发人员都忘记确保从服务器返回的内容类型被重置为 XHTML 页面从 text/html 到 application/xhtml+xml。

希望我知道博主的名字,但其他人指出,大多数所谓的 XHTML 兼容网站和开源软件包实际上并不是因为最后一个问题,忘记正确设置 content-type 标头。

我希望了解 XHTML 为何有用,或者构建足够多的论据以防止它在我有影响力的未来项目中使用。

【问题讨论】:

你的内容类型错误,应该是application/xhtml+xml,你漏掉了一个X。 【参考方案1】:

XHTML1 与 HTML4 以及 Strict 与 Transitional 是完全正交的问题。

XML 可能不会给今天的浏览器带来任何巨大的优势,但在服务器端,使用 XML 处理文档比尝试解析老式 SGML 的混乱情况要容易一个数量级,除了不是真正的 HTML4 .

将自己限制在 [X]HTML Strict 本身并没有任何作用,只是它不鼓励使用您无论如何都不应该使用的旧的、不易维护的技术。

内联 javascript 通常需要大量的转义来使其与 XHTML 兼容

只要您不使用字符

无论如何,将脚本保持在外部更易于管理;你不想内联做任何重要的事情。

然后是用户输入不够强迫症以确保您不会错过任何非法字符的问题。

带外字符在 HTML4 Transitional 中与在 XHTML1 Strict 中一样无效。

如果您接受用户提交的 HTML 并且没有使用足够的细齿梳来检查/转义它以防止格式错误,那么您遇到的问题比仅仅遵守文档类型要大得多。您将让注入黑客通过,并使您的网站容易受到跨站点脚本安全漏洞的攻击。

忘记确保从服务器返回的内容类型为 XHTML 页面从 text/html 重置为 application/html+xml。

这不是“忘记”,而是故意的:今天为 application/xhtml+xml 提供服务已经没有什么意义了。要考虑到 IE,您必须嗅探 UA,然后确保您了解在两种解析模式中弹出的 CSS 和 JavaScript 差异……您可以这样做来证明您的技术实力,但这并不能真正让您得到任何东西.

将 XHTML 作为旧版 HTML 服务可能并不理想,但它可以让您保持更简单、更易于处理的 XML 语法(以及与其他 XML 语言(如 SVG)的潜在互操作性),同时仍然对浏览器友好。

人们抱怨格式正确的错误很挑剔,但是让这些错误立即被找出来让你修复它们比让它们静静地留在那里,准备好在未来的浏览器中跳闸要好得多。

【讨论】:

1. XHTML 和 HTML 没有区别,除非 MIME 问题,否则 XHTML1 Strict 和 HTML4 Strict 之间没有区别。区别在于 Strict 和 Transitional,后者您仍然可以使用旧的不推荐使用的 HTML 标签。 2. text/html 和 application/xhtml+xml 之间绝对没有渲染差异,只要您使用正确的 doctype 触发浏览器的标准兼容模式,而不是使用 Internet Explorer 中的 XML 声明。 XML 删除 HTML 的“特殊情况”存在渲染差异。最值得注意的是,身体背景不会填满视口。由于命名空间 DOM 方法要求和缺少 document.write,脚本也可能有很大不同。【参考方案2】:

有一篇很棒的关于 XHTML @Beware of XHTML 的使用的帖子。

希望对你有帮助, 布鲁诺·菲格雷多

【讨论】:

【参考方案3】:

XHTML 1.0 Strict 试图解决四个问题:

    XML 是 W3C 技术,而 HTML4 没有使用它。不是你的问题。

    在表现主义方面,严格寻求比过渡更纯粹。但这不是an XHTML vs. HTML issue。

    XML 解析器应该更简单。 (不完全正确;处理 DTD 部分的代码非常复杂。)现在,您会同时获得 XML 和 HTML parsers off-the-shelf,所以这不是您的问题。 (旁白:the mobile argument is utterly bogus。)

    application/xhtml+xml(虽然不是有效的 XHTML 1.0 Strict!)允许您混合其他词汇表。如果你今天想使用内联 MathML 或 SVG,这就是今天使用 application/xhtml+xml 的主要原因。然而,HTML5 工作的方向是让在 text/html 中使用 MathML 和 SVG 成为可能。

【讨论】:

【参考方案4】:

XHTML 很有用,因为它比 HTML 更容易创建简单的转换样式表或为它滚动您自己的解析器。

【讨论】:

【参考方案5】:

您是否必须使用程序解析您的 HTML,或者进行一些测试?然后,使用 XHTML。

对于其他一切,HTML 4.01(严格的、松散的、过渡性的,等等)都是完美的“标准”,而不是“麻烦”。

【讨论】:

【参考方案6】:

XHTML 使您能够像 SVG(可缩放矢量图形)一样进行高级渲染,它本身是一种 XML,但可以通过 XML 命名空间扩展轻松嵌入 XHTML,而无需 。不幸的是,只有 Firefox 和 Safari 支持它。对不起 IE6 用户。

有关 SVG 的更多信息,请访问 http://en.wikipedia.org/wiki/Svg

【讨论】:

【参考方案7】:

XHTML 使 HTML 与我们世界中所有其他基于 xml 的结构正交,这有两个主要好处。

我们在处理 xml 时使用的设计模式可以应用于 html。

软件工具同上。

【讨论】:

【参考方案8】:

XHTML 具有 xml 的优点。但是为什么是严格的变体呢?

我发现与不推荐使用的函数有一些相似之处。您仍然可以在这个版本中使用它们,但它们可能会在下一个版本中被删除。所以我认为过渡版本已被弃用。它仍然有效,并且适用于几个版本,但如果您想为未来构建,请使用严格版本。

【讨论】:

【参考方案9】:

Strict 旨在通过使两者更难混合来将内容和样式之间的分离形式化。 Elliotte Rusty Harold 在他的一本书中写了一篇关于 XHTML 的好文章,这里是 'Why XHTML' 上的相关摘录。

【讨论】:

【参考方案10】:

我看到 XHTML 解决的唯一问题是用户使用 Safari 的“问题”:我不知道该错误是否仍然存在,但是当我们最后一次被要求用 XHTML 编写时,我们遇到了一个使 XHTML 无法在 Safari 中使用的错误。在 XHTML 中,锚标记中不允许使用以下 URL,因为 & 符号没有被转义:

http://www.example.com/page.php?arg1=val1&arg2=val2

所以你要做的就是用 &像这样:

http://www.example.com/page.php?arg1=val1&arg2=val2

但 Safari 会转换 &到 &所以你会得到这个网址:

http://www.example.com/page.php?arg1=val1&arg2=val2

...就 PHP 而言,井号结束 URL。我知道有一些丑陋的 hack 允许您以其他方式传递两个变量,但如果 XHTML 会迫使您使用丑陋的 hack,那么最好不要使用它。

【讨论】:

【参考方案11】:

就个人而言,我喜欢 XHTML 的概念:比我们看到的大多数 HTML 更干净,更易于解析和验证。和大家一样,我开始编写 XHTML 页面。顺便说一句,我认为内联 JavaScript 没有问题,如果您将代码放在 CDATA 中,则无需转义。幸运的是 IE5 有点脱离了浏览器领域,比如 Netscape 4,它迫使我们写 / > 而不是 />,有时我仍然会在纯 XML 中看到......

现在,我已经阅读了许多文章,例如 Bruno 链接的那篇文章,其中有很多很好的论据来反对它在大多数情况下。基本上,它说大多数浏览器不仅为严格的 XHTML(作为 XML 服务)做好了准备,将 XHTML 作为 HTML 服务没有多大意义,而且无论如何它在大多数网站中并没有那么有用。

看看上面的论点:它们是完全有效的,能够将 MathML 或 SVG 直接放在页面中,使用 XSLT 解析器转换 XML,使用 XML 解析器处理页面,这真是太好了。

但是你多久这样做一次?解析页面是最终用户最常遇到的问题,可以使用好的 HTML 解析器。鉴于能够管理 MathML、SVG 或 XSLT 的浏览器数量众多,与庞大的 Internet 相比,对 Intranet 的需求更大。

您可以拥有一个电子商务、一个博客或一个论坛,它们会输出良好的 XHTML 页面。写描述、文章或消息的人插入 <p><p><p> 以跳过一些行,而不是 <p/> 或其他一些奇特的结构......

我相信 XHTML,但我认为我不会再将它用于我为我的网站所做的小页面。我将使用 HTML 4 和编写良好的代码(引用的属性、关闭标签,即使是可选的等等)。 毕竟,如果 W3C 在 HTML 5 中工作,那是有原因的:HTML 仍然有前途,否则它会被 XHTML 2 淘汰。

【讨论】:

【参考方案12】:

XHTML 根据定义是 XML,与 HTML 不同。

这意味着您可以用它做一些时髦有用的事情,例如轻松验证和解析它(因为您知道它是 XML,因此可以使用无数可用的工具)。

此外,极客喜欢让事情“更正确”;-)

【讨论】:

XHTML 绝不是“更正确”。 HTML 也可以使用 DTD 进行验证。【参考方案13】:

这是一个全球标准问题

这不仅仅是关于 xHTML,而是关于世界上所有的标准。你需要让事情更清楚,从一个版本到另一个版本。

xHTML 是方形的,它促使编码人员为代码添加语义价值。它完全兼容 XML,因此更易于解析、样式化等。

请记住,代码不仅适用于编码员,机器人也适用于机器。在 10 年内,创建浏览器或库的人不会希望为旧的 HTML 处理实现相同的复杂规则,而是希望得到尽可能干净的东西。

搜索引擎需要依靠一些东西来建立价值之间的语义联系,所以最好只有一种简单的方法来做到这一点。

我说的不是屏幕阅读器...

标准,首先是关于朝着满足每个人需求的独特开放解决方案发展。不仅仅是添加新的闪亮功能。

【讨论】:

HTML 4.01 是一个有效的标准,可以用语义的方式编写。您也可以编写结构正确但没有语义意义的 XHTML。

以上是关于XHTML strict 解决了啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

【DIV+CSS】如何使DIV高度100%

无法拖动对象的克隆(JQuery)

php联系表格干净的代码

csv文件打开英文乱码

javascript popup提示

当您使用 javascript 填充需要子元素的元素时,如何编写有效的 XHTML 1.0 Strict 代码?