如何找出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