Http 数组究竟是如何进行URL编码的?
许多语言允许通过url传递一个值数组。出于各种原因,我需要直接手工构建url。值数组是如何编码的?它看起来像是MIME类型的内容:Http 数组究竟是如何进行URL编码的?,http,cgi,Http,Cgi,许多语言允许通过url传递一个值数组。出于各种原因,我需要直接手工构建url。值数组是如何编码的?它看起来像是MIME类型的内容:application/x-www-form-urlencoded 这是默认的内容类型。使用此内容类型提交的表格必须按以下方式编码: 控件名称和值被转义。空格字符替换为+,然后按照[RFC1738]第2.2节所述对保留字符进行转义:非字母数字字符替换为%HH,一个百分号和两个十六进制数字表示字符的ASCII码。换行符表示为“CR LF”对(即,%0D%0A) 控件名称
application/x-www-form-urlencoded
这是默认的内容类型。使用此内容类型提交的表格必须按以下方式编码:
+
,然后按照[RFC1738]第2.2节所述对保留字符进行转义:非字母数字字符替换为%HH
,一个百分号和两个十六进制数字表示字符的ASCII码。换行符表示为“CR LF”对(即,%0D%0A
)=
分隔,名称/值对之间用&
分隔?
,其余的几乎相等。在注释中,mdma声明URL不能包含空格字符的+
。改用%20
因此,一组值:
http://localhost/someapp/?0=zero&1=valueone%20withspace&2=etc&3=etc
库中通常有一些功能可以为您进行URL编码(第1点)。第二点很容易实现,方法是在数组上循环,构建字符串,附加索引,
=
,URL编码值,当它不是最后一个条目时,&
我最近才发现表单编码URL实际上是错误的,但一个常见错误(大多数主要浏览器都会这样做。)区别在于“+”。URL应遵循RFC1738。在POST正文中允许表单编码,但在GET查询参数中不允许表单编码-URL应仅使用URL编码。我知道这是在吹毛求疵——仅供参考。:)谢谢谷歌搜索引擎怎么样:/search?q=hello+world
,这是一个GET,但使用的是+
?这似乎是工作,但它不是“真正允许的”,以下规格。。。我现在明白了这一点。+1:大多数浏览器都会生成它,可能99%的服务器都会接受它,因为它们将URL查询参数视为表单编码。我自己也做过,但我从来没有真正喜欢使用+来表示空间,这看起来像是一种黑客行为。