码迷,mamicode.com
首页 > Web开发 > 详细

URLDecoder: Illegal hex characters in escape (%) pattern - For input string:

时间:2016-05-05 09:39:52      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:

来自:http://stackoverflow.com/questions/11257509/urldecoder-illegal-hex-characters-in-escape-pattern-for-input-string-p

 

Whoever created the URL should have percent encoded the % by writing %25.

Example invalid URL

http://example.com/test?q=%.P

Example valid URL

http://example.com/test?q=%25.P

The answer provided by Mark Byers will work just fine if there‘re only % chars that need to be escaped but will fail if url contains percent-encoded chars. To avoid this there‘s a little bit more work needed.

In percent-encoding (url-encoding) only reserved and unreserved chars won‘t be percent-encoded.

Reserved chars:
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
 !  #  $  &    (  )  *  +  ,  /  :  ;  =  ?  @  [  ] 
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝

Unreserved chars:
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R 
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
 S  T  U  V  W  X  Y  Z  a  b  c  d  e  f  g  h  i  j 
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
 k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z 
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝
╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗
 0  1  2  3  4  5  6  7  8  9  -  _  .  ~ 
╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝

According to RFC 3986 percent-encoded character has following format: % + hex. So if you want to properly escape url that has unescaped % chars without breaking the whole url before actually decoding it, you need to replace only those % signs that are not followed by hex.

Finding substring that violates some pattern is pretty easy task with regex. In this case pattern will look like this:

%(?![0-9a-fA-F]{2})

Sample:

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String url = "http://example.com/test?q=%.P%20some%20other%20Text";
        url = url.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
        System.out.println(url);
    }
}

URLDecoder: Illegal hex characters in escape (%) pattern - For input string:

标签:

原文地址:http://www.cnblogs.com/sunxucool/p/5460569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!