1get 特殊字符串请求
当get 请求的url中 含有特殊字符串的时候,在前端传送给后台的过程中, 会将其删除。例如传【测试#测试】 在页面 Network=》Headers=》Query StringParameters 可以看到【测试测试】。一般如果只遇到一个特殊的字符 就只需要将其转化为十六进制就行 例如【测试%23测试】传入后台就是【测试#测试】。
如果一个字符还行,但是多个的话,就不推荐手写十六进制。前端可以使用encodeURIComponent() 将参数包裹,后台使用URLDecoder.decode() 负责解码
//后台解码
String decode = URLDecoder.decode(name);
//前端加密
var name="测试¥%"
encodeURIComponent(name)
序号 | 特殊字符 | 含义 | 十六进制值 |
1. | + | URL 中+号表示空格 | %2B |
2. | 空格 | URL中的空格可以用+号或者编码 | %20 |
3. | / | 分隔目录和子目录 | %2F |
4. | ? | 分隔实际的 URL 和参数 | %3F |
5. | % | 指定特殊字符 | %25 |
6. | # | 表示书签 | %23 |
7. | & | URL 中指定的参数间的分隔符 | %26 |
8. | = | URL 中指定参数的值 | %3D |
#拓展
1get 特殊字符串请求的补充 来源
encodeURI()和encodeURIComponent()方法都可以对URI(通用资源标识符)进行编码,以便发送给浏览器。
但它们编码的范围有所不用。
- encodeURI()方法不会对下列字符编码:ASCII字母、数字、~!@#$&*()=:/,;?+'
- encodeURIComponent()方法不会对下列字符编码:ASCII字母、数字、~!*()'
使用场景
- 对 整个URL 进行编码就使用encodeURI()
- 对 URL中的参数 或者 URL后面的一部分 进行编码就使用encodeURIComponent()
举例说明:
对一个URL进行编码
encodeURI("http://x.com/你好?a=1")
// 正确
假设我想在google中查询上面这个网址
encodeURI("http://google.com/search?q=http://x.com/你好?a=1")
// 正确
上面这样写没什么问题,但是如果把查询的网址更改成这样再encodeURI
encodeURI("http://google.com/search?q=http://x.com/你好?a=1&b=2")
// 错误,查询参数被&分隔了,有歧义
因为&没有被编码,这部分就不能作为一个整体的查询参数,而是被分隔成了http://x.com/%E4%BD%A0%E5%A5%BD?a=1
和&b=2
两部分,所以要用encodeURIComponent对&进行编码
encodeURIComponent("http://google.com/search?q=http://x.com/你好?a=1&b=2")
// 正确