如果有非法字符会发生什么?URL会通过将非法字符编码为其他字符来自我修复吗?
如这里所述:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=. 其他任何字符都需要使用百分号编码(%hh)。URI 的每个部分还有关于哪些字符需要用百分号编码的进一步限制。
RFC 3986 定义了URI组件中允许使用的字符。
特定URI方案的RFC可能会进一步限制这些字符。
如果您对HTTP/HTTPS URI感兴趣:它们在RFC 7230中定义。据我所知,它们没有关于允许字符的进一步限制,因此您可以遵循RFC 3986中的定义。
取决于许多因素……可能是从“什么都不会发生”到“不再起作用”的任何情况。
URL是否通过将非法字符编码为其他内容来修复自身?
URI无法自我修复,它只是一个字符串。
使用此URI的客户端(浏览器、服务器、电子邮件客户端等)可能根据其自己的规则尝试修复URI(或使用无效的URI)。
还要注意URI和在文档中链接(或存储等)此URI之间的区别。
宿主语言(例如HTML)可能有规则要进行编码。这不会改变URI,只会改变在该文档中存储/指定URI的方式。
例如,在HTML文档中,有效的URI http://example.com/a&b
必须像这样链接:
<a href="http://example.com/a&b">Link</a>
但是URI仍然是http://example.com/a&b
,而不是http://example.com/a&b
。