X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fdolda%2Fjsvc%2Futil%2FMisc.java;h=a86735ae80b7dffb79e600e1d66ba6c8f37ec562;hb=efa9722bc37910a6224346bb20210205c96ecc47;hp=e92b3240270fc4674be6481dc77e04585a64300a;hpb=ffbaba013fa57247890912e54e4e1e085482720d;p=jsvc.git diff --git a/src/dolda/jsvc/util/Misc.java b/src/dolda/jsvc/util/Misc.java index e92b324..a86735a 100644 --- a/src/dolda/jsvc/util/Misc.java +++ b/src/dolda/jsvc/util/Misc.java @@ -5,6 +5,7 @@ import java.util.*; import java.io.*; public class Misc { + public static final java.nio.charset.Charset utf8 = java.nio.charset.Charset.forName("UTF-8"); private static Map stext = new HashMap(); static { @@ -52,4 +53,54 @@ public class Misc { ret = new ErrorHandler(ret); return(ret); } + + public static int hex2int(char digit) { + if((digit >= '0') && (digit <= '9')) + return(digit - '0'); + if((digit >= 'a') && (digit <= 'f')) + return(digit - 'a' + 10); + if((digit >= 'A') && (digit <= 'F')) + return(digit - 'A' + 10); + throw(new NumberFormatException("Invalid hex digit " + digit)); + } + + public static char int2hex(int nibble, boolean upper) { + if((nibble >= 0) && (nibble <= 9)) + return((char)('0' + nibble)); + if((nibble >= 10) && (nibble <= 15)) + return((char)((upper?'A':'a') + nibble - 10)); + throw(new NumberFormatException("Invalid hex nibble " + nibble)); + } + + public static String htmlq(String in) { + StringBuilder buf = new StringBuilder(); + for(int i = 0; i < in.length(); i++) { + char c = in.charAt(i); + if(c == '&') + buf.append("&"); + else if(c == '<') + buf.append("<"); + else if(c == '>') + buf.append(">"); + else + buf.append(c); + } + return(buf.toString()); + } + + public static String urlq(String in) { + byte[] bytes = in.getBytes(utf8); + StringBuilder buf = new StringBuilder(); + for(int i = 0; i < bytes.length; i++) { + byte b = bytes[i]; + if((b < 32) || (b == ' ') || (b == '&') || (b == '?') || (b == '/') || (b == '=') || (b == '#') || (b == '%') || (b == '+') || (b >= 128)) { + buf.append('%'); + buf.append(int2hex((b & 0xf0) >> 4, true)); + buf.append(int2hex(b & 0x0f, true)); + } else { + buf.append((char)b); + } + } + return(buf.toString()); + } }