V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
V2EX  ›  Java

urlencode 的一些疑惑

  •  
  •   rqxiao · 2020-12-21 11:29:13 +08:00 · 1815 次点击
    这是一个创建于 1193 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2020-12-21 14:19:57 +08:00
    这种方法会把用于区分键值对的& 和 参数里的&都 处理了,那服务器那边是怎么区分什么是参数什么是区分键值对的&呢
    5 条回复    2020-12-23 09:07:27 +08:00
    baobao1270
        1
    baobao1270  
       2020-12-21 11:36:31 +08:00 via Android
    基本上所有需要都会把这两个字符 encode 的吧
    JinTianYi456
        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
    opengps
        3
    opengps  
       2020-12-21 13:04:58 +08:00
    看准编码要解决的问题,一切就好理解了

    url 作为一个 &区分组=区分键值对的结构,需要对参数中的参数值进行控制。
    第一,避免参数名和参数值中出现&=这俩最基础的关键字。
    其次,才是:/?这类 url 基础结构的字符。
    然后,还要考虑万国语言的兼容。比如中文
    AoEiuV020
        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
    rqxiao
        5
    rqxiao  
    OP
       2020-12-23 09:07:27 +08:00
    @AoEiuV020 您说的对
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3147 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:37 · PVG 20:37 · LAX 05:37 · JFK 08:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.