urlencode问题

3
使用urlencode时,有时空格会被编码为+号,有时会被编码为%20。我想知道在HTML中哪种是标准的?
5个回答

3

不是这样的。查询编码是URI/URN标准的一部分,完全取决于服务器希望如何呈现结果。有些使用%编码以便在解析方面更加安全(可读性并不重要),有些使用+,有些使用-(例如stack overflow)。

编码的原因很简单,URI/URN不允许空格(和其他特殊字符)。然而,标准没有定义应该如何完成。


我在想,使用“-”(例如堆栈溢出)是否会给其他不熟悉堆栈溢出的开发人员带来困难?我相信没有库方法可以处理空格到“-”。 - user496949
你可以轻松地使用任何库来进行+或其他替换,只需注意查询的其余部分(必须从查询字符串中删除替换字符,否则在解码字符串时会被替换)。 - Femaref
只是一些额外的信息;不能直接使用空格的原因是它在HTTP请求中是一个分隔符。如果您使用Fiddler2查看请求:“GET /page.php?key=value HTTP/1.1”。正如您所看到的,这两个空格分隔了HTTP关键字、页面名称和协议版本。 - Tedd Hansen

1

1

urlencode 将空格编码为 +,而 rawurlencode 则将其编码为 %20

urlencode

这与 » RFC 3986 编码(请参见 rawurlencode())不同,因为出于历史原因,空格被编码为加号(+)符号。

根据 rawurlencode

返回一个字符串,其中所有非字母数字字符(除了 -_.~)都被替换为百分号(%)后跟两个十六进制数字。这是 » RFC 3986 中描述的编码,用于保护文字字符不被解释为特殊的 URL 分隔符,并保护 URL 免受字符转换(例如某些电子邮件系统)的传输媒体破坏。


1

按照标准,'+' 是 URI 中的保留字符 (RFC 3986)。URI 有两个子空间:URL 和 URN。'http:' 是 URL 方案的一种实现,RFC 3986 保留字符的使用是特定于 http 的。'?' 是 URI 中的另一个保留字符,在 http URL 中用于标记查询字符串的开始。同样,'+' 保留字符用于编码空格。百分号编码 (%20) 是编码空格的标准方式,并且适用于任何 URI(不管其实现方式如何)。

请参见 何时将空格编码为加号 (+),何时编码为 %20?


0

HTML 中没有 urlencode,因此它未被定义。

将空格转换为什么取决于设计和实现。

空格不是 URI 有效的,因此需要进行转换。 %20 是空格的 URI 有效编码。 + 是用于更好的可读性替换空格的字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接