Http 数组究竟是如何进行URL编码的?

Http 数组究竟是如何进行URL编码的?,http,cgi,Http,Cgi,许多语言允许通过url传递一个值数组。出于各种原因,我需要直接手工构建url。值数组是如何编码的?它看起来像是MIME类型的内容:application/x-www-form-urlencoded 这是默认的内容类型。使用此内容类型提交的表格必须按以下方式编码: 控件名称和值被转义。空格字符替换为+,然后按照[RFC1738]第2.2节所述对保留字符进行转义:非字母数字字符替换为%HH,一个百分号和两个十六进制数字表示字符的ASCII码。换行符表示为“CR LF”对(即,%0D%0A) 控件名称

许多语言允许通过url传递一个值数组。出于各种原因,我需要直接手工构建url。值数组是如何编码的?

它看起来像是MIME类型的内容:
application/x-www-form-urlencoded

这是默认的内容类型。使用此内容类型提交的表格必须按以下方式编码:

  • 控件名称和值被转义。空格字符替换为
    +
    ,然后按照[RFC1738]第2.2节所述对保留字符进行转义:非字母数字字符替换为
    %HH
    ,一个百分号和两个十六进制数字表示字符的ASCII码。换行符表示为“CR LF”对(即,
    %0D%0A
  • 控件名称/值按它们在文档中的显示顺序列出。名称与值之间用
    =
    分隔,名称/值对之间用
    &
    分隔
  • 这是用于邮政的。为了实现GET,您必须在URL后面附加一个
    ,其余的几乎相等。在注释中,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查询参数视为表单编码。我自己也做过,但我从来没有真正喜欢使用+来表示空间,这看起来像是一种黑客行为。