Mega Code Archive

 
Categories / Java / Network Protocol
 

Encode a URI path

//  // Copyright 2004-2005 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at  // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //  /**  * URI Holder. This class assists with the decoding and encoding or HTTP URI's.  * It differs from the java.net.URL class as it does not provide communications  * ability, but it does assist with query string formatting.  * <P>  * UTF-8 encoding is used by default for % encoded characters. This may be  * overridden with the org.mortbay.util.URI.charset system property.  *   * @see UrlEncoded  * @author Greg Wilkins (gregw)  */ public class Utils {   /* ------------------------------------------------------------ */   /**    * Encode a URI path.    *     * @param path    *          The path the encode    * @param buf    *          StringBuffer to encode path into (or null)    * @return The StringBuffer or null if no substitutions required.    */   public static StringBuffer encodePath(StringBuffer buf, String path) {     if (buf == null) {       loop: for (int i = 0; i < path.length(); i++) {         char c = path.charAt(i);         switch (c) {         case '%':         case '?':         case ';':         case '#':         case ' ':           buf = new StringBuffer(path.length() << 1);           break loop;         }       }       if (buf == null)         return null;     }     synchronized (buf) {       for (int i = 0; i < path.length(); i++) {         char c = path.charAt(i);         switch (c) {         case '%':           buf.append("%25");           continue;         case '?':           buf.append("%3F");           continue;         case ';':           buf.append("%3B");           continue;         case '#':           buf.append("%23");           continue;         case ' ':           buf.append("%20");           continue;         default:           buf.append(c);           continue;         }       }     }     return buf;   } }