0.说明

第一幕

产品大叔有用户反映账户不能绑定公众号。
大叔:啊咧咧?怎么可能,我看看?
大叔:恩?这也没问题啊,魏虾米。
大叔:还是没问题啊,挖叉类。
大叔:T T,话说产品姐姐是不是Java提供接口的时候,没有对URL进行encodeURI
产品:啊咧咧?我问问看?

第二幕

大叔翔逼你给我过来!
翔逼:啊咧咧?怎么了大叔
大叔:知道在URL中的+有时候会变成什么吗?
翔逼:啊咧咧?不是+吗?
大叔:知道在URL中的空格有时候会变成什么吗?
翔逼:啊咧咧?不是空格吗?
大叔:还不赶快自己去查查看!别也成了挖坑型选手。

1.杀手兄弟 - 加号与空格

0.说明

维基百科中关于百分号编码中有段说明。

当HTML表单中的数据被提交时,表单的域名与值被编码并通过HTTP的GET或者POST方法甚至更古远的email把请求发送给服务器。这里的编码方法采用了一个非常早期的通用的URI百分号编码方法,并且有很多小的修改如新行规范化以及把空格符的编码"%20"替换为"+" . 按这套方法编码的数据的MIME类型是application/x-www-form-urlencoded, 当前仍用于(虽然非常过时了)HTML与XForms规范中. 此外,CGI规范包括了web服务器如何解码这类数据、利用这类数据的内容。

1.GET - 简单的在浏览器中测试

URL带有加号

在浏览器里输入URLhttps://www.baidu.com/s?wd=翔逼+大叔,这时候百度搜索框中出现的是翔逼 大叔搜索框+神奇的变成了空格

URL带有空格

在浏览器里输入URLhttps://www.baidu.com/s?wd=翔逼 大叔,这时候百度搜索框中出现的是翔逼 大叔URL空格的变成%20

URL带有%2B

在浏览器里输入URLhttps://www.baidu.com/s?wd=翔逼%2B大叔,这时候百度搜索框中出现的是翔逼+大叔搜索框%2B的变成+

2.POST - 简单的PHP测试

代码
<?php
echo $_POST['word'];
POSTMAN 发送请求
POST /1.php HTTP/1.1
Host: 127.0.0.1
Cache-Control: no-cache
Postman-Token: fed5740c-aceb-0f57-edc9-cf42a275b35a
Content-Type: application/x-www-form-urlencoded word=%2B%2B%2B+%2B%2B%2B
输出
+++ +++

2.孕妇 - URL中的URL

0.说明

在社交登录或微信公众号等时候,我们常常会在URL中使用到回调地址来处理验证成功后的页面跳转。

例如:

  • 回调地址为:lionis.taroball.com?username=lionis&sex=man

  • 这时候在URL中附加回调信息时

  • 地址变为www.xxx.com?redirect=lionis.taroball.com?username=lionis&sex=man

这个时候尴尬的问题出现了,sex=man在这个时候变成了www.xxx.com的参数了,而不是lionis.taroball.com的参数了。

这个时候就需要对回调信息进行encodeURL

2.代码

<?php
// 文件名为test.php
echo $_GET['redirect'];

3.有 encodeURL

URL
localhost/test.php?redirect=lionis.taroball.com%3Fusername%3Dlionis%26sex%3Dman
输出
lionis.taroball.com?username=lionis&sex=man

4.无 encodeURL

URL
localhost/test.php?redirect=lionis.taroball.com?username=lionis&sex=man
输出
lionis.taroball.com?username=lionis

3.结论

GET

  • 如果想在URL中使用+需要对URL进行encodeURL,把+编码成%2B

  • 在服务端渲染页面的时候,对URL需要encodeURL

  • 在客户端发送请求的时候,javascript需要使用正则来进行替换

  • 在服务端接受参数的时候,对关键字使用decodeURL

  • 对于URL中的URL也需要进行encodeURL

POST

  • POSTContent-Type默认是application/x-www-form-urlencoded,顾名思义对URL进行了encodeURL

  • 想要了解更多有关POST可以看我之前写的你所不知道的POST

你所不知道的 URL的更多相关文章

  1. 你所不知道的 CSS 滤镜技巧与细节

    承接上一篇你所不知道的 CSS 动画技巧与细节,本文主要介绍 CSS 滤镜的不常用用法,希望能给读者带来一些干货! OK,下面直接进入正文.本文所描述的滤镜,指的是 CSS3 出来后的滤镜,不是 IE ...

  2. 你所不知道的 CSS 阴影技巧与细节

    关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow 的用法. 最近一个新的项目,CSS-Ins ...

  3. 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例

    你所不知道的 CSS 阴影技巧与细节   关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow  ...

  4. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  5. 你所不知道的setInterval

    在你所不知道的setTimeout记载了下setTimeout相关,此篇则整理了下setInterval:作为拥有广泛应用场景(定时器,轮播图,动画效果,自动滚动等等),而又充满各种不确定性的这set ...

  6. 你所不知道的setTimeout

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...

  7. 你真的会玩SQL吗?你所不知道的 数据聚合

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  8. 你所不知道的linq(二)

    上一篇说了from in select的本质,具体参见你所不知道的linq.本篇说下from...in... from... in... select 首先上一段代码,猜猜结果是什么? class P ...

  9. 你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...

随机推荐

  1. [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

    [0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...

  2. Win7-其中的文件夹或文件已在另一个程序中打开

    Win7-其中的文件夹或文件已在另一个程序中打开 如何解决Win7系统在删除或移动文件时提示,“操作无法完成,因为其中的文件夹或文件已在另一个程序中打开,请关闭该文件夹或文件,然后重试”.   步骤阅 ...

  3. 套题T6

    过节(festival.cpp/c/pas) Dxy帮老师们过教师节的时候需要购买礼物.货架上有n 种礼物,每种礼物有不同的个数.每种礼物有价值和花费两种属性,帮他算出最大可以得到的价值.M是带的钱数 ...

  4. Linux内核的同步机制

    本文详细的介绍了Linux内核中的同步机制:原子操作.信号量.读写信号量和自旋锁的API,使用要求以及一些典型示例 一.引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程 ...

  5. Java学习笔记之:Java简介

    一.引言 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出. ...

  6. windows环境下安装 zookeeper

    我们下载下来的zookeeper的安装包是.tar.gz格式的,但是还是可以在windows下运行. 下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ ...

  7. notepad++每行首尾添加内容

    有时候我们需要给一个文本文件的每行前面或后面添加一些内容,例如我们一个文本文件里存放了很多图片的地址,现在我们需要把这些图片批量转换成html标记 百度经验:jingyan.baidu.com 工具/ ...

  8. 值得珍藏的.NET源码,不保存就没机会了

    很早以前,我们通过http://referencesource.microsoft.com/netframework.aspx可以下载到.NET的各版本公开源码,但如今,微软对sscli项目进行了改版 ...

  9. 随机森林——Random Forests

    [基础算法] Random Forests 2011 年 8 月 9 日 Random Forest(s),随机森林,又叫Random Trees[2][3],是一种由多棵决策树组合而成的联合预测模型 ...

  10. VC 6.0 LNK2005 错误 处理

    造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量.可能存在两种情况: A.对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下.其实这是错误的,全局变量是 ...