%0D%0A
)。前者可能是因为这样可以节省表单提交中非常常见的2个字节的字符,而以更少见的字符为代价使用额外的2个字节,后者是为了避免在使用不同的行结束符编码系统之间传输时出现问题。非ASCII字符未予考虑。
UTF-8编码在URI中出现的时间比较晚,是在RFC 3986中提出的,尽管早期的一些协议可能已经指定了这种或其他非ASCII字符的编码方式。为了保持向后兼容性,所有UTF-8八位字节必须进行百分号编码。伴随着RFC 3987的“国际化资源标识符”(IRI)定义了基本上是“允许大多数代码点160及以上未经编码”的“URI”,但仍然有许多协议需要URI。请注意,您上面的说法是不正确的,因为URL不能包含未编码的ü或任何其他非ASCII字符。
application/x-www-form-urlencoded以不同的方式进行了国际化。HTML5规范的application/x-www-form-urlencoded明确允许在查询字符串中使用任何ASCII兼容字符集,并且实际上不同的字段可以使用不同的字符集,但所有非ASCII八位字节仍必须进行百分号编码。当在IRI的查询部分中使用时,如果使用适当规范化的UTF-8作为字符集,则这些字符可能可以表示为未编码的形式,因为转换回URI将导致正确的application/x-www-form-urlencoded数据。
它们不一定需要不同,+
是有效的路径字符,而ü
是有效的搜索字符(根据RFC 3987)。您可能会看到浏览器或其他预设编码方案做出过时或过于谨慎的假设。