我有一个像http://google.com/search/q=<%= name %>
这样的字符串。
我无法控制的第三方js库将其转发到"http://google.com/search/q=%3C%=%20name%20%%3E"
哪个Javascript可以使用
成功转换为原始字符串unescape("http://google.com/search/q=%3C%=%20name%20%%3E")
但是Java URLDecode.decode("http://google.com/search/q=%3C%=%20name%20%%3E")
会抛出一个IllegalArgumentException
因为字符串中未转义的文字%
字符当然是正确的并且符合规范,但这会使服务器 - 边处理复杂。
在我尝试使用正则表达式修复服务器端的错误JS转义之前(因为,如上所述,我无法修改JS端),我想知道是否有更宽松的Java URL / URI解码API的工作方式与Javascript&#39; unescape
相同,即可以忽略独立的&#39;%&#39;字符,只解码任何可解码的字符。
答案 0 :(得分:1)
我快速浏览了一些Apache库并遇到了同样的问题。有趣的是,当我在EMCAScript语言规范中进行跟进时,我发现了unescape()函数的伪代码。您可以在https://tc39.github.io/ecma262/#sec-unescape-string
看到这一点很容易将这个的简单实现(见下文)放在一起,至少在你的问题中输出匹配的例子。
现在这段代码没有被优化,我还没有考虑字符编码是否相关,但它可能比尝试用Regex解决问题更难以实现。
python3 /path/to/script