如果输入接受属性包含 MIME 类型列表,则 W3C 验证错误

mjn*_*mjn 2 html validation file-upload

我尝试使用<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>
Run Code Online (Sandbox Code Playgroud)

使用HTML5 验证器导致此错误:

元素输入上的属性接受的错误值 .rtf、text/rtf、application/rtf、text/richtext:期望标记字符或 / 但看到了。

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

Ori*_*iol 5

规范来看,

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

如果指定,则该属性必须由一组以逗号分隔的标记组成,每个标记都必须是以下一项的不区分大小写ASCII匹配:

  • 该字符串audio/*
    表示接受声音文件。
  • 该字符串video/*
    表示接受视频文件。
  • 该字符串image/*
    表示接受图像文件。
  • 一个有效的MIME类型不带参数
    表示指定类型的文件都可以接受。
  • 第一个字符是“.”的字符串。(U+002E) 字符
    表示接受具有指定文件扩展名的文件。

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

  • <input type="file" accept="text/rtf, application/rtf, text/richtext" /> 验证。
  • <input type="file" accept=".rtf" /> 不验证。

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

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

<input type="file" accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document">
Run Code Online (Sandbox Code Playgroud)

那么,这是验证器的问题。