【问题标题】:why apache-commons lib encoding space as + not as %20?为什么 apache-commons lib 将空间编码为 + 而不是 %20?
【发布时间】:2011-02-22 05:40:02
【问题描述】:

我使用来自Apache Commons Codec 的URLCodec 来编码URL,但它将空间编码为+ 而不是%20

为什么?解决办法是什么?

【问题讨论】:

标签: java apache-commons url-encoding apache-commons-codec


【解决方案1】:

See this related question

当然,如果需要,你可以随时使用url.replace("+", "%20");(编码后)

【讨论】:

  • @Johan:我在看到你之前删除了我的评论,因为我觉得我在狙击 Bozho,这不是我的意图。 w3schools 不是很可靠。例如,随机举一个例子,如果你依赖他们对 JavaScript String#replace 函数 (w3schools.com/jsref/jsref_replace.asp) 的描述,你不会知道你可以为第二个参数提供一个函数,这确实是 有用.
  • @T.J.无论如何,克劳德感谢您指出 w3schools 的不可靠性。无论如何我删除了引用,反正它没有那么重要。
  • “当然,你总是可以这样做 url.replace(" ", "%20");"... 那是个坏主意(你不想在编码之前这样做,你会以编码的% 结尾;并且在 编码之后没有空格)。你想要.encode(str).replace("+", "%20");。
  • @T.J. Crowder 是的,你说得对,我的意思是在编码之后,但忘记了它变成了一个加号:)
【解决方案2】:

因为+ 是一种同样有效的空间编码方式。你想“解决”什么?

【讨论】:

  • 亲爱的,我需要那个 .. 我有理解 %20 而不是 + 的网络服务 .. 检查这两个请aydeena.com/Services/Search.svc/JSON/SearchByText/… aydeena.com/Services/Search.svc/JSON/SearchByText/…
  • @adham:在这种情况下,该 Web 服务不符合标准。它应该被修复。
  • @adham:如果您的网络服务无法将 + 解码为空格,则说明它已损坏,而不是编码。如果根本原因是不符合标准的 web 服务,我敢打赌,一些手动字符串处理正在进行中,上帝禁止使用正则表达式,而不是使用旨在符合规范的解码功能。
  • 您不应该将 + 解码为 URL 中除查询字符串以外的空格
【解决方案3】:

URLCodec 对适合提交表单的内容进行编码,这与对 URL 进行百分比编码不同。 this question有更多解释

请参阅this question,了解应如何对 URL 进行编码。

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多