urlencode 的一些疑惑

2020-12-21 11:29:13 +08:00
 rqxiao

java 中 String encode(String s)的时候 会把 s 里的?和&都 encode 了 &会替换成%26,?会替换成%3F

但是网上看到的说的 urlencode 是对参数中出现&和?这种特殊字符进行 urlencode,用来区分这个是参数还是分隔符

这种把全部字符都处理了一遍是为什么呢

1983 次点击
所在节点    Java
5 条回复
baobao1270
2020-12-21 11:36:31 +08:00
基本上所有需要都会把这两个字符 encode 的吧
JinTianYi456
2020-12-21 12:58:37 +08:00
- 不为什么,你就按它 类 /方法 怎么说明怎么来用呗
-- String.format("https://a.com/q=%s", URLEncoder.encode("&", StandardCharsets.UTF_8.name()))
- 类似 encodeURI vs encodeURIComponent
-- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI#encodeURI_vs_encodeURIComponent
opengps
2020-12-21 13:04:58 +08:00
看准编码要解决的问题,一切就好理解了

url 作为一个 &区分组=区分键值对的结构,需要对参数中的参数值进行控制。
第一,避免参数名和参数值中出现&=这俩最基础的关键字。
其次,才是:/?这类 url 基础结构的字符。
然后,还要考虑万国语言的兼容。比如中文
AoEiuV020
2020-12-22 18:11:59 +08:00
压根不是让你在最后对整个 url 做 encode 的,
这个 encode 是对 key 和 value 做的,比那种有例外的靠谱多了,
http://www.example.com/path?from=https://www.baidu.com/s?wd=asdf
比如有参数是个地址的情况,有例外的 urlcode 就会出现 value 里出现不该存在的符号,
如果对 key 和 value 做完全的 urlencode 就很简单,
http://www.example.com/path?from=https%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3Dasdf
rqxiao
2020-12-23 09:07:27 +08:00
@AoEiuV020 您说的对

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737430

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX