如何找出string是否已被URL编码?

我如何检查string是否已被编码?

例如,如果我编码TEST== ,我得到TEST%3D%3D 。 如果我再次编码最后一个string,我得到了TEST%253D%253D ,我必须知道之前,如果它已经编码…

我保存了编码参数,我需要search它们。 我不知道input参数,它们是什么 – 编码或不是,所以我必须知道,如果我必须在search之前编码或解码它们。

解码,比较原来的。 如果不一样,原始编码。 如果没有不同,则原始编码不被编码。 但仍然没有说明新解码的版本是否仍然被编码。 recursion的一个很好的任务。

我希望在urlencode中不能写一个quine,否则这个algorithm会卡住。

使用正则expression式来检查你的string是否包含非法字符(即在URL编码string中不能find的字符,如空格)。

乔尔在软件上有一个解决scheme,有时回来 – http://www.joelonsoftware.com/articles/Wrong.html
或者你可以给string添加一些前缀。

你不能确定地知道,除非你的string符合某种模式,或者你跟踪你的string。 正如你自己所指出的那样,一个被编码的string也可以被编码,所以你不能通过查看string本身来100%确定。

尝试解码url。 如果结果string比原始字符短,那么原始URL已经被编码了,否则你可以安全地对它进行编码(不是编码,或者是编码后URL保持不变,所以再次编码不会导致错误的url )。 下面是样例伪(由ruby启发)代码:

 # Returns encoded URL for any given URL after determining whether it is already encoded or not def escape(url) unescaped_url = URI.unescape(url) if (unescaped_url.length < url.length) return url else return URI.escape(url) end end