有时,空格会将URL编码为+符号,有时会将其编码为%20 。 有什么区别,为什么会发生这种情况?


#1楼

+表示application/x-www-form-urlencoded内容中的空格,例如URL的查询部分:

http://www.example.com/path/foo+bar/path?query+name=query+value

在此URL中,参数名称是带有空格的query name ,值是带空格的query value ,但路径中的文件夹名称实际上是foo+bar而不是 foo bar

%20是在这些上下文中的任何一个中编码空间的有效方法。 因此,如果您需要对字符串进行URL编码以包含在URL的一部分中,则使用%20替换空格并使用%2B替换空格总是安全的。 这就是例如。 encodeURIComponent()在JavaScript中。 不幸的是,这不是urlencode在PHP中的作用( rawurlencode更安全)。

另请参见HTML 4.01规范应用程序/ x-www-form-urlencoded


#2楼

有什么区别:见其他答案。

使用+而不是%20 ? 使用+如果由于某种原因,你想的网址查询字符串( ?..... )或哈希代码( #.... )更具可读性。 示例:您实际上可以阅读:

https://www.google.se/#q=google+doesn%27t+encode+:+and+uses+%2B+instead+of+spaces ( %2B = +)

但以下内容更难阅读:(至少对我而言)

https://www.google.se/#q=google%20doesn%27t%20oops%20:%20%20this%20text%20%2B%20is%20different%20spaces

我认为+不太可能破坏任何东西,因为Google使用+ (参见上面的第一个链接)并且他们可能已经考虑过这个问题了。 我将使用+我自己只是因为可读+谷歌认为它没关系。


#3楼

最好始终将空格编码为%20,而不是“+”。

它是RFC-1866(HTML 2.0规范),它规定空格字符应在“application / x-www-form-urlencoded”内容类型键值对中编码为“+”。 (见第8.2.1。第1段)。 这种编码表单数据的方式也在后面的HTML规范中给出,查找有关application / x-www-form-urlencoded的相关段落。

以下是URL中此类字符串的示例,其中RFC-1866允许将空格编码为插件:“http://example.com/over/there?name=foo+bar”。 因此,根据RFC-1866,只有在“?”之后,空格才能被加号替换。 在其他情况下,空格应编码为%20。 但由于很难确定上下文,因此最好不要将空格编码为“+”。

我建议对所有字符进行百分比编码,但RFC-3986,p.2.3中定义的“无保留”除外

unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"

#4楼

所以,这里的答案都有点不完整。 在RFC3986中明确定义了使用'%20'来编码URL中的空格 , RFC3986定义了如何构建URI。 在本说明书中没有提及使用'+'来编码空格 - 如果你完全按照这个规范,则空格必须编码为'%20'。

使用'+'来表示编码空间的提法来自HTML规范的各种形式 - 特别是在描述内容类型'application / x-www-form-urlencoded'的部分中。 这用于发布表单数据。

现在,HTML 2.0规范(RFC1866)在8.2.2节中明确指出,GET请求的URL字符串的Query部分应编码为'application / x-www-form-urlencoded'。 从理论上讲,这表明在查询字符串中的URL中使用“+”是合法的(在'?'之后)。

但是......真的吗? 请记住,HTML本身就是一个内容规范,带有查询字符串的URL可以与HTML以外的内容一起使用。 此外,虽然HTML规范的更高版本继续在'application / x-www-form-urlencoded'内容中将'+'定义为合法,但它们完全省略了说GET请求查询字符串被定义为该类型的部分。 实际上,在HTML 2.0规范之后的任何内容中都没有提及任何关于查询字符串编码的内容。

这给我们留下了一个问题 - 它是否有效? 当然,有很多遗留代码支持查询字符串中的“+”,还有很多生成代码的代码。 所以如果使用'+',你不会破坏的可能性很大。 (而且,事实上,我最近对此进行了所有研究,因为我发现一个主要网站未能在GET查询中接受'%20'作为空格。他们实际上无法解码任何百分比编码字符。所以服务你“重新使用也可能是相关的。”

但是从纯粹的规范读取来看,如果没有HTML 2.0规范中的语言延续到更高版本,则URL完全由RFC3986覆盖,这意味着空格应该转换为'%20'。 如果您要请求HTML文档以外的任何内容,那肯定是这种情况。


#5楼

http://www.example.com/some/path/to/resource?param1=value1

问号前面的部分必须使用%编码(因此空格为%20 ),问号后可以使用%20+作为空格。 如果您在问号后需要实际+ ,请使用%2B

何时将空间编码为加号(+)或%20?相关推荐

  1. 名图空间实测_骗子!20来万的大众SUV号称7.8秒破百,实测后我服了!

    很多对汽车知识了解不深的消费者,大多是从别人口中去了解车型,而网络发达的现在充斥这大量的键盘侠,这些键盘侠很多都并没有接触过实车,仅仅是依靠网上的一些数据.等级.定位等等话术来显示自己的知识. 可是数 ...

  2. PHP--------解决网址URL编码问题

    2019独角兽企业重金招聘Python工程师标准>>> 在PHP中有urlencode().urldecode().rawurlencode().rawurldecode()这些函数 ...

  3. 【总结】PHP常见面试题汇总(一)

    [php] view plaincopy print? /** * 第1题:用PHP打印出上周的时间格式,如:"2015-01-22 14:42:09" */ echo date( ...

  4. php 面试 (-)

    原地址 http://blog.csdn.net/yanhui_wei/article/details/43022987 /** * 第1题:用PHP打印出上周的时间格式,如:"2015-0 ...

  5. 【总结】PHP常见面试题汇总(一)。。。

    /*** 第1题:用PHP打印出上周的时间格式,如:"2015-01-22 14:42:09"*/echo date("Y-m-d H:i:s",strtoti ...

  6. php urlencode()函数详解

    理解URLEncode:  URLEncode:是指针对网页url中的中文字符的一种编码转化方式,最常见的就是Baidu.Google等搜索引擎中输入中文查询时候,生成经过 Encode过的网页URL ...

  7. 踩坑系列]URLEncode 中对 空格的编码有 “+”和“%20”两种

    URL中的空格有时候被编码成%20,有时候被编码成加号+,曾经迷糊过一段时间,后来查了下资料才搞明白. 一个URL的基本组成部分包括协议(scheme),域名,端口号,路径和查询字符串(路径参数和锚点 ...

  8. URL中关于空格的编码转换成+或转换成%20的问题

    https://www.jianshu.com/p/4a7eb969235d 本人Android开发,某一天,被告知自己程序URL的编码中,空格被转换成了+,导致对方识别不成空格.当然我清楚的记得我是 ...

  9. 基于EinScan-S的编码结构光方法空间三维模型重建

    基于EinScan-S的编码结构光方法空间三维模型重建 1 相关原理 1.1 编码结构光成像原理 1.2 编码结构光编码方式 1.3 编码结构光与侧影轮廓方法比较 1.4 编码结构光方法流程 2 三维 ...

最新文章

  1. 使用ubuntu(18.04) 作为软路由器连接互联网
  2. 愿...统一沟通...易行天下!
  3. Ubuntu 显示隐藏文件
  4. MDI接口原理图设计
  5. ThreadLocal是什么?
  6. 指针类型和指针类型转换的理解
  7. 好代码是管出来的——Git的分支工作流与Pull Request
  8. [MEGA DEAL]完整的Java编程训练营(94%折扣)
  9. 硬件描述语言复习笔记
  10. java 四舍五入_Java常用类
  11. 冯仕堃:预训练模型哪家强?百度知识增强大模型探索实践!
  12. Siri 自动拨打 911、Google 建筛查网站、IBM 测药物成分,国际抗疫在行动!
  13. WPF系列教程(十六):文本控件——TextBox、RichTextBox、PasswordBox
  14. 如何评价《守望先锋》架构设计?
  15. 《大学生Python学习》社区正式运行,加入我们,每日学习,引燃青春~
  16. linux用户登陆报错Resource temporarily unavailable
  17. zbrush常用笔刷_zbrush笔刷大合集
  18. PIN PIN2 PUK PUK2
  19. 线上科普vr展厅设计供应 广交会布展
  20. Babe Lua加载项目失败,点了按钮也没反应的解决办法(未将对象引用设置到对象的示例)

热门文章

  1. 用 JavaScript 编写测试脚本
  2. iOS架构-静态库.framework之依赖第三方库(7)
  3. (0030) iOS 开发之跳转之转场动画
  4. 故障申报系统php源码,运维不再专业救火 不会PHP照样找出代码性能问题
  5. python程序员面试宝典 勘误_《前端面试江湖》勘误合集(二)
  6. oracle 11g数据库以管理员身份登录不上
  7. 半分钟内能看透问题本质的人是如何思考的?
  8. linux update更新源
  9. vs开发工具报错:参数错误 异常来自 HRESULT:0x80070057 E_INVALIDARG
  10. 一个红 - 黑树的具体描述