/* * 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; byte[] barr = s.getBytes(encoding); ByteArrayInputStream bin = new ByteArrayInputStream(barr); 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('%'); 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)); } }