URL特殊字符需转义   1、空格换成加号(+)
2、正斜杠(/)分隔目录和子目录
3、问号(?)分隔URL和查询
4、百分号(%)制定特殊字符
5、#号指定书签
6、&号分隔参数

如果请求的URL中含有 %- _ . ! ~ * ' ( )等转义字符串,后台转义字符的原因: 
如果你的表单使用get方法提交,并且提交的参数中有“&”等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数来看待。例如 
表单的action为list.jsf?act=Go&state=5 
则提交时通过request.getParameter可以分别取得act和state的值。 
如果你的本意是act='go&state=5'这个字符串,那么为了在服务端拿到act的准确值,你必须对&进行转义

解决方法:

首先在前台使用encodeURI() 、escape() 、encodeURIComponent() 函数可把字符串作为 URI 进行编码。

js对字符编码有三种方法

  1.escape()   函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

说明: 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

2.encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

说明:该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

提示和注释 
提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

3 .encodeURI() 函数可把字符串作为 URI 进行编码。

说明 
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

总结:

通过对三个函数的分析,我们可以知道:escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参 数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

其次需要在后台进行替换处理:

 public static String replacer(String outBuffer) {String data = outBuffer.toString();try {StringBuffer tempBuffer = new StringBuffer();int incrementor = 0;int dataLength = data.length();while (incrementor < dataLength) {char charecterAt = data.charAt(incrementor);if (charecterAt == '%') {tempBuffer.append("<percentage>");} else if (charecterAt == '+') {tempBuffer.append("<plus>");} else {tempBuffer.append(charecterAt);}incrementor++;}data = tempBuffer.toString();data = URLDecoder.decode(data, "utf-8");data = data.replaceAll("<percentage>", "%");data = data.replaceAll("<plus>", "+");} catch (Exception e) {e.printStackTrace();}return data;}

参考:http://blog.csdn.net/zljjava/article/details/38374455

参考:http://www.cnblogs.com/sunqiang/p/5893531.html

参考:http://stackoverflow.com/questions/11257509/urldecoder-illegal-hex-characters-in-escape-pattern-for-input-string-p

URL请求后台获取不到特殊字符的参数相关推荐

  1. SpringBoot+Vue实现请求后台获取Base64编码的图片验证码并使用Redis缓存实现2分钟内有效

    场景 前端Vue的登录页面,验证码请求后台,后台生成验证码照片后使用Base64编码后, 返回给前端,前端进行显示. 注: 博客: https://blog.csdn.net/badao_liuman ...

  2. 关于ajax请求后台获取下拉列表用的数据

    一.效果展示 有时候需要在页面请求后台获取数据:这里就用到了ajax去后台获取数据: 数据库的数据是这样的: mysql> select * from ocenter_travel_class_ ...

  3. 表单和ajax中的post请求后台获取数据方法(深度好文)

    最近要做后台数据接收,因为前台传来的数据太过于混乱,所以总结了一下前台数据post请求方法,顺便写了下相对应的后台接收方法. 前台主要的contenttype为下面三种:(需要注意的是请求头中data ...

  4. 04 基于Express框架创建的Node后台获取前端传过来的参数

    写在前面 NodeJS后台主要是用来实现后台数据库的增删改查,那么数据库的增删改查是需要依赖我们前端传过来的数据值,也就是说,我们要在数据库中插入一个值,插入的这个过程是NodeJS后台代码来做,具体 ...

  5. 解决url请求参数带中文时后台获取出现乱码问题

    第一种方法: var url = encodeURI(url);前端js先编码一次, 后台:String test=newString(request.getParameter("test& ...

  6. vue根据url获取内容axios_vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据...

    在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今天这边博文用来记录这一整个的过程,后台api接口是使用webpack-se ...

  7. ASP.NET后台获取url

    站在服务器磁盘上的物理路径: HttpRuntime.AppDomainAppPath 虚拟程序路径: HttpRuntime.AppDomainAppVirtualPath 任何于Request/H ...

  8. springboot获取多个请求参数_springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @pa ...

  9. HttpUrlConnection发送url请求(后台springmvc)

    1.HttpURLConnection发送url请求 public class JavaRequest {private static final String BASE_URL = "ht ...

最新文章

  1. 女性养生需知的16条健康戒律
  2. 2021暑假每日一题 【week7 完结】
  3. 一文看懂Python(七)-----断言
  4. 风格迁移应用_进展丨图像也能做情感迁移?罗切斯特大学团队提出计算机视觉新任务...
  5. 数据自治开放与治理模式创新
  6. 洛谷P2320 [HNOI2006]鬼谷子的钱袋
  7. 双向链表示意图_java双向链表示意图
  8. 《变革中的思索》连载九:放飞的爱——母亲和我
  9. 计算机组成原理第五章----存储器容量的扩展与芯片连接
  10. 工业智能网关,数据采集网关
  11. android 页面回滚焦点位置 解决方案
  12. wifi一到晚上服务器无响应,wifi到晚上网速很慢(为啥一到晚上网速就慢)
  13. 深圳大学计算机专硕就业工资,深大毕业研究生初次就业薪酬平均月薪广东第一,十年后是全国两倍...
  14. VOT(Visual Object Tracking)评价指标综述
  15. 原子性 可见性 有序性_极简主义的内容可见性
  16. Greenplum集群部署安装指南
  17. 逻辑运算符 位运算符_在现代PHP中,按位运算符仍然有意义吗?
  18. 华为AC+AP上线配置
  19. 计算机设备维修更换记录,单位电脑设备维护(维修)
  20. 录像:在VS Orcas和ASP.NET中使用LINQ (第一部分)

热门文章

  1. 签名不对,请检查是否与开放平台一致
  2. 如何在SQL中将某个算出来的值平摊到每一行中使用
  3. Shopee笔试题2019 零食柜
  4. 数据挖掘基础:度量数据的相似性和相异性
  5. Flash场景之间相互跳转的实现方法
  6. HP ProDesk 600 G1 SFF主板针脚定义
  7. 机器学习面试干货精讲
  8. 完美解决#define _AFXDLL or do not use /MD[d]
  9. python机器学习手册——学习代码(导入、处理、时间、图像、降维、sklearn模型、神经网络)
  10. oracle 层层汇总,人在江湖漂,哪能不挨刀之ORACLE分区表(上)