这是我处理这个问题的正常方法。首先,由于 + 是一个烦人的特殊情况,我不允许它作为编码的一部分。如果他们输入一个加号,那就是一个加号,如果他们想要一个空间,他们可以按键盘底部的那个大条。(是的,我已将其作为某些合同的一部分)。但实际上,当您为客户努力工作时,您可以将其解释清楚,以至于他们不必担心自己对其进行编码。
然后我重写java.net.URLDecoder.decode
以删除'+'案例。(实际上只是剪切和粘贴到我用于该项目的任何实用程序类中,然后删除约 4 行)。
然后对于我得到的所有东西,我只是通过解码器运行它,然后是编码器。如果已编码,这将对其进行解码和重新编码,如果未编码,则对其进行编码。几年前我从某人那里得到了这个提示,不记得应该给予谁适当的信任。
所以我最终得到:
String properlyencodedstring =
java.net.URLEncoder.encode(LocalDecoder.localdecode(someformdatastring),"UTF-8");
这可能需要调整的唯一时间是在需要输入和处理具有大量 url 组的数据的情况下,我改变我的假设,使用input type="url"
(对于旧浏览器使用某种 javascript polyfill),并预处理.replaceAll("+", " ")
,因为在这种情况下不允许输入任何空格。(而且很可能,java.net.URI
无论如何都要使用)