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 一致性检查器中的错误吗?
从规范来看,
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)
那么,这是验证器的问题。