Author: natalia
Date: Sun Apr 6 13:42:36 2008
New Revision: 645305
URL: http://svn.apache.org/viewvc?rev=645305&view=rev
Log:
New method for escaping path in URL
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java?rev=645305&r1=645304&r2=645305&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java
(original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/util/StringUtilities.java Sun
Apr 6 13:42:36 2008
@@ -20,6 +20,7 @@
package org.apache.xindice.util;
import java.util.StringTokenizer;
+import java.io.UnsupportedEncodingException;
/**
* StringUtilities provides a set of commonly used String parsing and
@@ -28,6 +29,7 @@
* @version $Revision$, $Date$
*/
public final class StringUtilities {
+ private static final String ALLOWED_CHARS = "$-_.+!*'(),;/:@&=";
private StringUtilities() {
}
@@ -225,67 +227,46 @@
}
}
+ public static boolean isBlank(String str) {
+ for (int i = 0; i < str.length(); i++) {
+ if (!Character.isWhitespace(str.charAt(i))) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
/**
- * Converts input text into its XML representation by escaping all special
symbols,
- * if any are present.
- *
- * @param text Input string
- * @return String with all the special symbols escaped
+ * Escapes a path in URL by converting all unsafe characters to a sequence
+ * of %xx according to RFC 1738 (Uniform Resource Locators (URL)). It is
+ * similar, but not identical to URLEncoder.
+ * @param path String representation of a URL path to be escaped
+ * @return Escaped path
*/
- public static String escapeXml(String text) {
- char[] value = text.toCharArray();
+ public static String escapePath(String path) {
StringBuffer buf = new StringBuffer();
- int start = 0;
- int len = 0;
-
- for (int i = 0; i < value.length; i++) {
- String outval = null;
- switch (value[i]) {
- case '&':
- outval = "&";
- break;
- case '\'':
- outval = "'";
- break;
- case '\"':
- outval = """;
- break;
- case '<':
- outval = "<";
- break;
- case '>':
- outval = ">";
- break;
- default :
- len++;
- break;
- }
+ for (int i = 0; i < path.length(); i++) {
+ char ch = path.charAt(i);
- if (outval != null) {
- if (len > 0) {
- buf.append(value, start, len);
+ if ((ch < 'A' || ch > 'Z') && (ch < 'a' || ch > 'z') && (ch < '0'
|| ch > '9') &&
+ ALLOWED_CHARS.indexOf(ch) < 0) {
+ try {
+ byte[] b = Character.toString(ch).getBytes("utf-8");
+ for (int j = 0; j < b.length; j++) {
+ char upper = Character.forDigit(((b[j] >> 4) & 0xF),
16);
+ char lower = Character.forDigit((b[j] & 0xF), 16);
+ buf.append('%').append(upper).append(lower);
+ }
+ } catch (UnsupportedEncodingException e) {
+ // won't happen
}
- buf.append(outval);
- start = i + 1;
- len = 0;
+ } else {
+ buf.append(ch);
}
}
- if (len > 0) {
- buf.append(value, start, len);
- }
-
return buf.toString();
- }
-
- public static boolean isBlank(String str) {
- for (int i = 0; i < str.length(); i++) {
- if (!Character.isWhitespace(str.charAt(i))) {
- return false;
- }
- }
-
- return true;
}
}