【问题标题】:W3C no longer maintains polyglot markup?W3C 不再维护多语言标记?
【发布时间】:2016-04-18 20:47:40
【问题描述】:

W3C has ended support for the polyglot markup. 那么我是否必须将我的网站转换为使用常规 HTML5 而不是 XHTML?他们放弃这个概念会如何影响现有网站?我想要一个完全有效的标记,如果该代码与标准冲突,我将不得不删除它。

【问题讨论】:

  • 个别语法仍然有效。您可以根据需要使用 HTML5 的 HTML 或 XHTML 语法,分别为 text/htmlapplication/xhtml+xml。但是,鉴于所有现代浏览器都支持这两种媒体类型,因此描述如何将单个文档视为两种语法的规范确实没有用。
  • 当前的 HTML 官方规范包括所有的多语言特性(void 元素中的斜线在 text/html 文档中是可选的,对于 xmlns 属性等也是如此)如此有效,这覆盖了多语言规范,使其不必要为此维护一个单独的文档。顺便说一句,我不知道您为什么认为他们放弃了 XHTML。 W3C 验证器将继续支持 XHTML 等。
  • 除非您的意思是您当前将 XHTML 文件作为 text/html 提供,在这种情况下我只能挑眉。
  • 实际上,是的,我确实将我的 XHTML 服务为text/html,因为如果是application/xhtml+xml,IE8 及以下版本根本不会显示它...我可以使用 php 来检测 IE 并发送合适的header,但浏览器字符串仍然可以更改为查看者想要的任何内容,所以我认为这个解决方案不可行。
  • 在这种情况下,多语言规范与您完全无关。所以是的,您应该将您的网站转换为使用常规 HTML5 而不是 XHTML。将“完全有效”的 XHTML 提供为 text/html 的问题在于浏览器将其视为无效标签汤。

标签: html xhtml polyglot-markup


【解决方案1】:

像往常一样,在没有真正理解 XHTML 是什么的情况下,在 cmets 中更多地抨击 XHTML。

  • XHTML 使用 XML 解析器。
  • HTML 使用 HTML 解析器。

  • XML 解析器是严格的,它是一个容错率低的应用程序。
  • HTML 解析器很轻松,不介意潜艇上的纱门是否打开。

您可以并且应该使用您可用的最严格的工具。在 PHP 的示例中,您应该始终检查变量是否为 isset。为什么?黑客将从表单中删除input 元素,提交表单,然后尝试查看服务器会发送哪些错误消息。但是,如果您降低 PHP 错误消息的严格性,您会认为一切都很好。

我看到一个人为为什么只有 Safari 不能正确呈现某种样式而紧张了 三天。如果他使用 XML 解析器,该页面(在 Firefox 中)将完全失败,并且他会收到一条错误消息,指出 确切错误是什么,它在哪一行以及该行的哪一列(其他浏览器渲染到这条线,所以默认使用 Firefox 进行测试)。他的错误?他在他的一个属性周围缺少双引号;他的潜艇上的纱门大开。

这并不意味着您不能使用 HTML5,因为我们在这里讨论的是语法。理想情况下,您应该使用 XHTML5,使用 XML 解析器的 HTML5。它不能解决所有问题(例如重复的 id 属性值),尽管它需要您在更高级别上进行编码。

是的,IE8 不支持 XHTML(它有点支持 XML),但甚至不值得考虑支持 IE8。坦率地说,它是唯一拥有任何“显着”市场份额但不支持 XHTML 的浏览器,但这并不意味着您不能进行内容协商:

<?php
if (stristr($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml'))
{
 header('Content-Type: application/xhtml+xml');
 echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
}
?>

请记住,如果 IE8 看到 XML 声明,它将以怪异模式呈现,尽管截至 2016 年这是一个有争议的问题,因为它不再是一个值得支持的浏览器,除非你作为专门处理该问题的专家获得报酬浏览器。

我的整个平台都使用 XHTML5,它大大提高了标准、开发时间和技能。总是质疑那些反对做需要更多技巧的事情的人的正直,这就是为什么说一毛钱一打存在的原因。


如果您正在寻找一种快速适应 XML 解析器使用的方法,但没有时间替换数十个或数百个 &lt;br&gt; 示例,我强烈建议您考虑使用 Advanced Find and Replace。选择一个目录、一种或多种文件类型(例如*.php;*.css;*.xml)和您要查找的代码,然后选择替换的内容。此外,通过 Wine 模拟它实际上运行得更快,Linux 的原生 grep 命令而且非常便宜。不过,请注意如何进行大规模查找和替换,代码的空白越严格,您的情况就会越好,并且总是先备份!

【讨论】:

  • 实际上,如果它是一个适合我的网站,坦率地说,我根本不会关心 IE5-9,而是在 XHTML5 中将我的网站作为 application/xhtml+xml...一个大型酒店公司的网站,我不能让他们失去客户。当然不是在涉及金钱的情况下。
  • 但是当我下次重新设计我的网站时,我会记住你所说的。
  • 那么就省略 IE8 及更低版本的 XML 声明。然后不要使用 any CSS hack,只需使用以下内容:jabcreations.com/web/css/ieccss 祝你好运!
  • 除了拥有 HTML 和 XML 解析器之外,浏览器还可以在 quirks 模式或标准模式下呈现。 IE8 和更早版本无法理解 XML(除了很难产生结果),因此 XML 声明将 IE8- 引入怪癖模式。因此,当 PHP 的年龄也为 application/xhtml+xml 时,只需提供 XML 声明;我会更新答案以反映这一点。
  • 我在问题 o_O 的 cmets 中没有看到任何 XHTML 抨击
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 2015-12-08
  • 2012-03-16
  • 2013-04-23
  • 2010-09-16
相关资源
最近更新 更多