0

在一个链接中,我有{}字符。在 chrome/ff (即?)中,当我单击该链接时,它会替换{%7B和。不幸的是,在歌剧中它没有。如果我的链接,然后成为其他浏览器(然后我得到一个 404 @ 那个资源)。因此,当我单击歌剧中的链接时,我得到. 我很困惑:}%7DURLEncoder.encode%7B%257Bjava.lang.IllegalArgumentException: Illegal character in path at index

  1. 为什么歌剧不编码{and }
  2. 为什么要抛出异常?为什么不直接对 URL 进行编码并继续?
  3. 如何在不破坏其他浏览器中的链接(带额外编码)的情况下解决这个问题?

编辑:我们正在使用jersey,正如堆栈跟踪中所说:

java.lang.IllegalArgumentException: Illegal character in path at index
    java.net.URI.create(URI.java:859)
    javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:95)
    com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:879)
    com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:843)
    com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:804)
4

1 回答 1

0

令人困惑(即它的名字很糟糕) URLEncoder 用于将数据作为参数传递,而不是用于对 URL 本身进行编码。

我们使用 org.apache.commons.httpclient.util.URIUtil.encodePath 但现在看起来这已经过去了(从 1.4 开始?),建议改用 java.net.URI: Commons- URIUtil.encodePath 发生了什么httpclient-3.1?

也看看这个:Java中的HTTP URL地址编码

于 2012-09-14T16:15:39.393 回答