【问题标题】:W3C validation error if input accept attribute contains MIME type list如果输入接受属性包含 MIME 类型列表,则 W3C 验证错误
【发布时间】:2014-08-19 19:35:07
【问题描述】:

我尝试使用<input type="file" ...> 元素的accept 属性将文件打开对话框限制为RTF 文件。 Internet 资源表明此属性可以包含以逗号分隔的扩展名和 MIME 类型列表。它确实有效,但存在验证问题:

此 HTML5 代码

<!DOCTYPE html>
<html>
  <meta charset="utf-8" />
  <title>Test</title>
</head>
<body>

<form>
  <input type="file" accept=".rtf, text/rtf, application/rtf, text/richtext" />
  <input type="submit"/>
</form>

</body>
</html>

使用HTML5 validator 导致此错误:

属性的错误值 .rtf、text/rtf、application/rtf、text/richtext 接受元素输入:需要一个标记字符或 / 但看到 , 而是。

这是 W3C 验证器的实验性 HTML5 一致性检查器中的错误吗?

【问题讨论】:

  • 我的第一个想法是尝试不带空格。但另外,w3 说:“使用实验性功能:HTML5 一致性检查器。验证器使用实验性功能检查您的文档:HTML5 一致性检查器。此功能为您提供方便,但请注意它可能不可靠, 或者不完全跟上一些尖端技术的最新发展。如果您发现此功能有任何问题,请报告。谢谢。” 所以这是一个错误不是不可想象的。
  • 也许 .rtf 不是有效的媒体类型?我在有效媒体类型列表中找不到它:iana.org/assignments/media-types/media-types.xhtml
  • @jls 该规范允许您使用扩展以及 mime 类型 - 请参阅 stackoverflow.com/a/14994849/80901
  • 这似乎是验证器中的一个错误。它不接受文件扩展名。幸运的是,验证器本身包含一个link to report issues
  • @GolezTrol HTML5 验证器的错误跟踪器位于 bugzilla.validator.nu/enter_bug.cgi - 因为它需要一个帐户,我稍后会报告它

标签: html validation file-upload


【解决方案1】:

来自spec

accept 属性可以指定为用户代理提供 提示将接受哪些文件类型。

如果指定,该属性必须由一组comma-separated tokens 组成,每个ASCII case-insensitive 都必须匹配 对于以下之一:

  • 字符串audio/*
    表示接受声音文件。
  • 字符串video/*
    表示接受视频文件。
  • 字符串image/*
    表示接受图像文件。
  • valid MIME type with no parameters
    表示接受指定类型的文件。
  • 首字符为“.”的字符串(U+002E) 字符
    表示接受具有指定文件扩展名的文件。

我已经尝试过验证器,并且

  • &lt;input type="file" accept="text/rtf, application/rtf, text/richtext" /&gt; 验证。
  • &lt;input type="file" accept=".rtf" /&gt; 不验证。

所以问题是.rtf,它应该被接受,因为它属于允许的令牌的最后一个类别。

此外,规范提供了这个例子,它没有验证

<input type="file" accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document">

那么,就是验证器的问题了。

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2018-12-31
    • 2015-06-02
    • 2017-06-08
    • 2013-04-27
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多