html - IRI 作为 HTML 属性值有效吗?

标签 html utf-8 uri urlencode

使用包含非 ASCII 字符的 IRI 作为属性值(例如对于 href 属性)而不是 URI 是否是有效的 HTML? HTML 风格(HTML 和 XHTML、4 和 5)之间有什么区别吗?至少RFC 3986似乎暗示它不是。

我意识到使用百分比编码可能会更安全(对于较旧的和 IRI 不敏感的软件),但我正在寻找关于标准的明确答案。

到目前为止,我已经用 W3C validator 做了一些测试, URI 中未转义的 unicode 字符不会触发 HTML 4/5 和 XHTML 4/5 文档类型的任何警告或错误(当然,没有错误消息并不意味着没有错误)。

至少 chrome 还支持原始 UTF-8 IRI,但在触发 HTTP 请求之前对它们进行百分比转义。此外,我的 Web 服务器 (lighttpd) 似乎在 HTTP 请求中支持百分比编码和未编码形式的 UTF-8 字符。

最佳答案

HTML 4.01 非常简单。不同的属性对于它们可以包含的内容有不同的规则,但是如果我们处理 <a> 上的 href 属性元素,然后是 HTML 4 spec, section B.2.1 Non-ASCII characters in URI attribute values说:

... the following href value is illegal:

<A href="http://foo.org/Håkon">...</A>

HTML5 不同。它说IRIs are valid providing they comply with some additional conditions.

A URL is a valid URL if at least one of the following conditions holds:

  • The URL is a valid URI reference [RFC3986].

  • The URL is a valid IRI reference and it has no query component. [RFC3987]

  • The URL is a valid IRI reference and its query component contains no unescaped non-ASCII characters. [RFC3987]

  • The URL is a valid IRI reference and the character encoding of the URL's Document is UTF-8 or a UTF-16 encoding. [RFC3987]

XHTML 1.x 遵循与 HTML 4.01 相同的规则。

XHTML5 与 HTML5 相同。

关于html - IRI 作为 HTML 属性值有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14074731/

相关文章:

javascript - 如何在jquery中只执行一次action?

javascript - 将JavaScript字符存储在一个字节中

c++ - 我在检查字符串时得到 "Invalid utf 8 error",但是当我使用 std::cout 时它似乎是正确的

Android 相机捕获 Activity 返回空 Uri

html - 基础 zurb 中的切换顶部栏问题

javascript - 如何用HTML5 Canvas绘制居中淡出渐变的圆圈?

html - 以正确的方式设置 &lt;input type=number/> 微调器箭头的样式

ios - NSDocumentDictionary : Saving NSString as file for Russian characters

javascript - Google Chrome 拖到桌面 : Custom 'File' Names

r - 如何从 DBPedia 检索带有标点符号的人名?