草庐IT

html - HTML 5 验证是否物有所值?

coder 2023-07-31 原文

人们普遍认为,验证一个人的 HTML 的最佳理由是确保所有浏览器都以一致且可预测的方式对待它。

但是,HTML 5 草案将两个规范合二为一。首先是作者规范,描述 HTML 作者应该使用的元素和属性,以及它们之间的相互关系。 HTML 5 页面的验证基于此规范。包含的元素和属性不是直接从 HTML 4 中提取的,而是需要根据第一原则进行证明,这意味着一些 HTML 4 特性,例如

上的 summary 属性、 上的 longdesc 和 profile 属性在 上,当前未出现在该草稿中。此类功能不被视为已弃用,只是不包括在内。 (他们没有出现在草案中仍然是一个有争议的问题,尽管他们似乎不太可能很快被列入。)

其次,该草案定义了一个浏览器处理规范,旨在准确定义浏览器的解析器将如何处理它提供的任何字节流,而不管 HTML 的格式和有效性如何。这意味着当浏览器完全支持 HTML 5 时,将有可能预测任何浏览器将如何处理 HTML 以处理范围更广的输入,而不仅仅是那些通过验证的输入。

特别是,由于 HTML 5 被定义为与今天的网络 100% 向后兼容,所有有效的 HTML 4 和所有无效但常用的标记将继续像今天一样被处理,无论HTML 5 是否有效。

因此,至少,任何使用 HTML 5、HTML 4 或任何以前版本的 HTML 的任何功能以及许多专有扩展的人都可以确信,他们的 HTML 将在所有浏览器中得到一致且可预测的处理。

鉴于此,将 HTML 5 限制为可验证的内容是否有意义,我们将从中获得什么实际好处?

最佳答案

  • 首先是与 HTML5 parsing algorithm 中的“解析错误”相对应的有效性层。这一层类似于 XML 的良构性。避免在该层上的文档中出现错误的最重要原因是您可能会得到一个令人惊讶的解析树。如果您的文档在该层上没有错误,那么在编写与 DOM 一起使用的 JS 或 CSS 时,您调试时会遇到更少的意外。
  • 作为上述层的特例,HTML5 文档类型为:<!DOCTYPE html>。人们想要遵守这里的原因是以最简单的方式获得标准模式。与每次需要查找、复制和粘贴的 HTML 4.01 或 XHTML 1.0 文档类型不同,它是您可以记住的东西。当然,您想要标准模式的原因是 CSS 层的意外情况较少。
  • 关心比解析算法更高层的验证的主要原因是发现您的拼写错误,这样您就可以花更少的时间来调试为什么您的页面无法按预期工作。
  • 上一点没有解释为什么当浏览器支持您没有拼错的给定元素或属性作为遗留问题时您应该关心验证,但 HTML5 规范仍然回避它。这就是 HTML5 废弃语法的原因:
    • HTML5 使用过时功能向作者发出信号,表明某些功能是在浪费他们的时间。这些包括 longdescsummaryprofile 。 (请注意,人们不同意这些是否确实是在浪费时间,但按照目前的草案,HTML5 使它们过时了。)也就是说,如果您用于提高可访问性的资源有限,那么您最好将有限的资源花在 longdesc 以外的其他东西上和 summary 。如果您的语义纯度资源有限,那么您的资源最好花在其他事情上,而不是确保您在 profile 中有正确的咒语。
    • HTML5 废弃了一些可以在 CSS 中复制的表示功能,以指导作者为自己的利益使用 CSS。这样,不考虑自己可维护性的作者应该被引导到更可维护的代码。就个人而言,我更愿意让更多的遗留表现形式的东西保持一致,并让作者自己决定哪种做事方式适合他们。
    • 出于政治原因,有些东西已经过时了。 <font> 元素已被废弃,因为使其符合规范会使反 <font> 标准主义者认为 HTML5 的人已经疯了,这可能会导致糟糕的 PR。 <applet> 被废弃的主要原因是不对某个特定插件进行特殊标记。 classid 上的 <object> 属性已废弃,因为它实际上是特定于 ActiveX 的。
    • 有些东西在语言设计美学的基础上被淘汰了。这包括 name 上的 <a> 属性和 language 上的 <script> 属性。

(我开发了 Validator.nu HTML5 验证器,它也是 W3C 验证器使用的 HTML5 验证引擎。)

关于html - HTML 5 验证是否物有所值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/432933/

有关html - HTML 5 验证是否物有所值?的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  7. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  8. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  9. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  10. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

随机推荐