/* * Copyright 2003 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.gv.egovernment.moaspss.util; import java.io.ByteArrayInputStream; import java.io.StringWriter; import java.io.UnsupportedEncodingException; /** * Translates a string into mime format "x-www-form-urlencoded". Provides a * function missing in JDK 1.3. * * @author Paul Ivancsics * @version $Id$ */ public class URLEncoder { /** * Translates a string into x-www-form-urlencoded format. * * @param s the string to be translated * @param encoding the encoding to use * @return the translated string * @throws UnsupportedEncodingException when the desired encoding is not * supported */ public static String encode(String s, String encoding) throws UnsupportedEncodingException { // if (MiscUtil.isEmpty(s)) // return null; final byte[] barr = s.getBytes(encoding); final ByteArrayInputStream bin = new ByteArrayInputStream(barr); final StringWriter out = new StringWriter(); for (int b = bin.read(); b >= 0; b = bin.read()) { encode(b, out); } return out.toString(); } /** * Encode a character. * * @param ch The character to encode. * @param out The StringWriter containing the result. */ private static void encode(int ch, StringWriter out) { if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9' || ch == '.' || ch == '-' || ch == '*' || ch == '_') { out.write(ch); } else if (ch == ' ') { out.write('+'); } else { encodeHex(ch, out); } } /** * Encode a character as an escaped hex value. * * @param ch The character to encode. * @param out The StringWriter containing the result. */ private static void encodeHex(int ch, StringWriter out) { out.write('%'); final String hex = Integer.toHexString(ch).toUpperCase(); if (hex.length() < 2) { out.write('0'); } else { out.write(hex.charAt(hex.length() - 2)); } out.write(hex.charAt(hex.length() - 1)); } }