in ldap/model/src/main/java/org/apache/directory/api/ldap/model/url/LdapUrl.java [1665:1810]
public static String urlEncode( String url, boolean doubleEncode )
{
StringBuilder sb = new StringBuilder();
for ( int i = 0; i < url.length(); i++ )
{
char c = url.charAt( i );
switch ( c )
{
// reserved and unreserved characters:
// just append to the buffer
// reserved gen-delims, excluding '?'
// gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
case ':':
case '/':
case '#':
case '[':
case ']':
case '@':
// reserved sub-delims, excluding ','
// sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
// / "*" / "+" / "," / ";" / "="
case '!':
case '$':
case '&':
case '\'':
case '(':
case ')':
case '*':
case '+':
case ';':
case '=':
// unreserved
// unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '-':
case '.':
case '_':
case '~':
sb.append( c );
break;
case ',':
// special case for comma
if ( doubleEncode )
{
sb.append( "%2c" );
}
else
{
sb.append( c );
}
break;
default:
// percent encoding
byte[] bytes = Unicode.charToBytes( c );
char[] hex = Strings.toHexString( bytes ).toCharArray();
for ( int j = 0; j < hex.length; j++ )
{
if ( j % 2 == 0 )
{
sb.append( '%' );
}
sb.append( hex[j] );
}
break;
}
}
return sb.toString();
}