java 中 String encode(String s)的时候 会把 s 里的?和&都 encode 了 &会替换成%26,?会替换成%3F
但是网上看到的说的 urlencode 是对参数中出现&和?这种特殊字符进行 urlencode,用来区分这个是参数还是分隔符
这种把全部字符都处理了一遍是为什么呢
1
baobao1270 2020-12-21 11:36:31 +08:00 via Android
基本上所有需要都会把这两个字符 encode 的吧
|
2
JinTianYi456 2020-12-21 12:58:37 +08:00 1
- 不为什么,你就按它 类 /方法 怎么说明怎么来用呗
-- 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 |
3
opengps 2020-12-21 13:04:58 +08:00
看准编码要解决的问题,一切就好理解了
url 作为一个 &区分组=区分键值对的结构,需要对参数中的参数值进行控制。 第一,避免参数名和参数值中出现&=这俩最基础的关键字。 其次,才是:/?这类 url 基础结构的字符。 然后,还要考虑万国语言的兼容。比如中文 |
4
AoEiuV020 2020-12-22 18:11:59 +08:00 1
压根不是让你在最后对整个 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 |