Java URI escaper,其工作方式类似于Javascript的unescape

时间:2017-11-06 16:24:06

标签: javascript java escaping urldecode unescapestring

我有一个像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;字符,只解码任何可解码的字符。

1 个答案:

答案 0 :(得分:1)

我快速浏览了一些Apache库并遇到了同样的问题。有趣的是,当我在EMCAScript语言规范中进行跟进时,我发现了unescape()函数的伪代码。您可以在https://tc39.github.io/ecma262/#sec-unescape-string

看到这一点

很容易将这个的简单实现(见下文)放在一起,至少在你的问题中输出匹配的例子。

现在这段代码没有被优化,我还没有考虑字符编码是否相关,但它可能比尝试用Regex解决问题更难以实现。

python3 /path/to/script