zoukankan      html  css  js  c++  java
  • URLDecoder: Illegal hex characters in escape (%) pattern

    来自: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);
        }
    }
  • 相关阅读:
    游戏中的角色移动:闭包(closure)在实际开发中的作用
    第六章 函数[DDT书本学习 小甲鱼]【1】
    Python模块EasyGui专题学习
    第十章 图形用户界面入门[DDT书本学习 小甲鱼]【1】
    第五章 列表、元组和字符串[DDT书本学习 小甲鱼]【7】
    ueditor 配置和上传图片
    常用的48个jQuery小技术点
    js 全选 ,全不选,反选的实现
    一个简单的登录页面,效果不错哦!
    关于模态框的引入
  • 原文地址:https://www.cnblogs.com/sunxucool/p/5460569.html
Copyright © 2011-2022 走看看