Function URLDecode(enStr)
dim deStr
dim c,i,v
deStr=""
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if v<128 then
deStr=deStr&chr(v)
i=i+2
else
if isvalidhex(mid(enstr,i,3)) then
if isvalidhex(mid(enstr,i+3,3)) then
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
else
v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
deStr=deStr&chr(v)
i=i+3 
end if 
else 
destr=destr&c
end if
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
end functionfunction isvalidhex(str)
isvalidhex=true
str=ucase(str)
if len(str)<>3 then isvalidhex=false:exit function
if left(str,1)<>"%" then isvalidhex=false:exit function
c=mid(str,2,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
c=mid(str,3,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
end function

解决方案 »

  1.   


    给你改了第二个:
    public static boolean isValidHex(String s) {
        return s.toUpperCase().matches("^\\%[0-9A-F]{2}$");
    }第一个太长了,有时间再看吧。
      

  2.   

    <%!
    String decodeURL(String enStr){
    java.util.regex.Pattern p = java.util.regex.Pattern.compile("%[\\dA-F]{2}");
    java.util.regex.Matcher m = p.matcher(enStr);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
    m.appendReplacement(sb, String.valueOf((char)Integer.parseInt(m.group().substring(1),16)));
    }
    m.appendTail(sb);
    return sb.toString();
    }
    %>
      

  3.   

    <%=decodeURL("hello%21%22%59") %>
      

  4.   

    刚才的有中文问题,这样处理一下
    <%!
    String decodeURL(String enStr){
    java.util.regex.Pattern p = java.util.regex.Pattern.compile("%[\\dA-F]{2}");
    java.util.regex.Matcher m = p.matcher(enStr);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
    m.appendReplacement(sb, String.valueOf((char)Integer.parseInt(m.group().substring(1),16)));
    }
    m.appendTail(sb);
    String s = "有错误";
    try{
    s = new String(sb.toString().getBytes("ISO8859_1"),"GB2312");
    }catch(Exception e){
    System.out.println(e.toString());
    }
    return s;
    }
    %>
    <%=decodeURL("http://www.baidu.com/s?wd=%D6%D0%CE%C4&cl=3") %>