Welcome!

Welcome to the official BlackBerry Support Community Forums.

This is your resource to discuss support topics with your peers, and learn from each other.

inside custom component

Java Development

Reply
Developer
misty83
Posts: 745
Registered: ‎01-04-2009
My Device: 8300, 8800, 8700f, 9000
Accepted Solution

"+" in url

hi i connect using http.

my url has "+", it looks more or less like this:

 

http://mydomain.com/ajax.php?req=mdm/something.php&param1=&param2=NAME+NAME2

 

and i get an errror "java.land.IllegalArgumentException".

 

when url is without "+" it works..

 

my question is-i cannot use "+" in url for http connection? the strangest thing is that i wrote this url in my device's browser and it works..

 

do You maybe know what is wrong with this?

 

 regards

Developer
dpreussler
Posts: 212
Registered: ‎07-18-2008
My Device: Storm 9550

Re: "+" in url

You should encode the + it's a special character

Also: Historically the "+" was handles as escaped whitespace before %20 came in.

 

Try to replace + by %2B

 

The browser does the encoding itself

If your problem was solved, please mark answer as "Accepted solution"
If your want to thank, click the "kudo" symbol
___________
visit me: http://mobilejavadevelopment.blogspot.com/
visit the Berlin BlackBerry Developer Group: http://berlinblackberrydevelopers.blogspot.com/
Developer
klerisson
Posts: 78
Registered: ‎12-03-2009
My Device: Not Specified

Re: "+" in url

[ Edited ]

You can just escape the character:

 

 

private static String escape(String input) {
		final char[] reserved = {':', '/', '?', '#', '[', ']', '@', '!', '$', '&', '\'', '(', ')', '*', 
				'+', ',', ';', '=',' ','%','^','"','<','>','|','`'};
		StringBuffer o = new StringBuffer();
		int l = input.length();
		for(int i = 0; i < l; i++) {
			char ch = input.charAt(i);
			boolean escaped = false;
			for(int j = 0; j < reserved.length; j++) {
				if(ch == reserved[j]) {
					o.append('%');
					o.append(Integer.toHexString(ch).toUpperCase());
					escaped = true;
					break;
				}
			}
			if(!escaped)
				o.append(ch);
		}
		return o.toString();
	}	

 

 

 

or

 

Here is a good class modified to handle your issue and so on:

 

 

public class URLUTF8Encoder
{

  final static String[] hex = {
    "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07",
    "%08", "%09", "%0A", "%0B", "%0C", "%0D", "%0E", "%0F",
    "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17",
    "%18", "%19", "%1A", "%1B", "%1C", "%1D", "%1E", "%1F",
    "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27",
    "%28", "%29", "%2A", "%2B", "%2C", "%2D", "%2E", "%2F",
    "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37",
    "%38", "%39", "%3A", "%3B", "%3C", "%3D", "%3E", "%3F",
    "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47",
    "%48", "%49", "%4A", "%4B", "%4C", "%4D", "%4E", "%4F",
    "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57",
    "%58", "%59", "%5A", "%5B", "%5C", "%5D", "%5E", "%5F",
    "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67",
    "%68", "%69", "%6A", "%6B", "%6C", "%6D", "%6E", "%6F",
    "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77",
    "%78", "%79", "%7A", "%7B", "%7C", "%7D", "%7E", "%7F",
    "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87",
    "%88", "%89", "%8A", "%8B", "%8C", "%8D", "%8E", "%8F",
    "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97",
    "%98", "%99", "%9A", "%9B", "%9C", "%9D", "%9E", "%9F",
    "%A0", "%A1", "%A2", "%A3", "%A4", "%A5", "%A6", "%A7",
    "%A8", "%A9", "%AA", "%AB", "%AC", "%AD", "%AE", "%AF",
    "%B0", "%B1", "%B2", "%B3", "%B4", "%B5", "%B6", "%B7",
    "%B8", "%B9", "%BA", "%BB", "%BC", "%BD", "%BE", "%BF",
    "%C0", "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7",
    "%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF",
    "%D0", "%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7",
    "%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF",
    "%E0", "%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7",
    "%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF",
    "%F0", "%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7",
    "%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"
  };

  /**
   * Encode a string to the "x-www-form-urlencoded" form, enhanced
   * with the UTF-8-in-URL proposal. This is what happens:
   *
   * <ul>
   * <li><p>The ASCII characters 'a' through 'z', 'A' through 'Z',
   *        and '0' through '9' remain the same.
   *
   * <li><p>The unreserved characters - _ . remain the same.
   *
   * <li><p>The space character ' ' is converted into a plus sign %20.
   *
   * <li><p>All other ASCII characters are converted into the
   *        3-character string "%xy", where xy is
   *        the two-digit hexadecimal representation of the character
   *        code
   *
   * <li><p>All non-ASCII characters are encoded in two steps: first
   *        to a sequence of 2 or 3 bytes, using the UTF-8 algorithm;
   *        secondly each of these bytes is encoded as "%xx".
   * </ul>
   *
   * @param s The string to be encoded
   * @return The encoded string
   */
  public static String encode(String s)
  {
    StringBuffer sbuf = new StringBuffer();
    int len = s.length();
    for (int i = 0; i < len; i++) {
      int ch = s.charAt(i);
      if ('A' <= ch && ch <= 'Z') {		// 'A'..'Z'
        sbuf.append((char)ch);
      } else if ('a' <= ch && ch <= 'z') {	// 'a'..'z'
	       sbuf.append((char)ch);
      } else if ('0' <= ch && ch <= '9') {	// '0'..'9'
	       sbuf.append((char)ch);
      } else if (ch == ' ') {			// space
	       sbuf.append("%20");
      } else if (ch == '-' || ch == '_'		// unreserved
          || ch == '.'// || ch == '!'
         || ch == '~' )//|| ch == '*'
         // || ch == '\'' || ch == '('
         // || ch == ')') 
        	{
        sbuf.append((char)ch);
      } else if (ch <= 0x007f) {		// other ASCII
	       sbuf.append(hex[ch]);
      } else if (ch <= 0x07FF) {		// non-ASCII <= 0x7FF
	       sbuf.append(hex[0xc0 | (ch >> 6)]);
	       sbuf.append(hex[0x80 | (ch & 0x3F)]);
      } else {					// 0x7FF < ch <= 0xFFFF
	       sbuf.append(hex[0xe0 | (ch >> 12)]);
	       sbuf.append(hex[0x80 | ((ch >> 6) & 0x3F)]);
	       sbuf.append(hex[0x80 | (ch & 0x3F)]);
      }
    }
    return sbuf.toString();
  }

}

 

 

--
Feel free to press the kudos button on the left side to thank the user that helped you.
Please mark posts as solved if you found a solution.
Developer
misty83
Posts: 745
Registered: ‎01-04-2009
My Device: 8300, 8800, 8700f, 9000

Re: "+" in url

unfortunatelly,

neither:

%20:

http://mydomain.com/ajax.php?req=mdm/something.php&param1=&param2=NAME%20NAME2

 nor %2B:

http://mydomain.com/ajax.php?req=mdm/something.php&param1=&param2=NAME%2BNAME2

 

did not solve the problem.. i've got the same exception..

klerisson, Your methods removes also signs as '&' and more.. i got really strange url after trying Your methods...

Developer
dpreussler
Posts: 212
Registered: ‎07-18-2008
My Device: Storm 9550

Re: "+" in url

when using the methods you have to encode every part (parameter) on it's own or it will remove any ?,&... also

 

You get this exception locally on the device with Connector.open?

If your problem was solved, please mark answer as "Accepted solution"
If your want to thank, click the "kudo" symbol
___________
visit me: http://mobilejavadevelopment.blogspot.com/
visit the Berlin BlackBerry Developer Group: http://berlinblackberrydevelopers.blogspot.com/
Developer
misty83
Posts: 745
Registered: ‎01-04-2009
My Device: 8300, 8800, 8700f, 9000

Re: "+" in url

i get this address when parsing jad, it tells me when cod file to download another app is.. so i parse jad and get:

 

http://mydomain.com/ajax.php?req=mdm/something.php&param1=&param2=NAME+NAME2

 

so it's not like i have some parts/parameters..

i've tried doing simply substring and then put %20 or %2B, but none of these helps..

 

yes, i got this when Connector.open try to open this url...

 

regards

Developer
dpreussler
Posts: 212
Registered: ‎07-18-2008
My Device: Storm 9550

Re: "+" in url

Oh I just saw the slash, thats also not allowed as parameter!

 

The url  should be:

 

http://mydomain.com/ajax.php?req=mdm%2Fsomething.php&param1=&param2=NAME%2BNAME2

If your problem was solved, please mark answer as "Accepted solution"
If your want to thank, click the "kudo" symbol
___________
visit me: http://mobilejavadevelopment.blogspot.com/
visit the Berlin BlackBerry Developer Group: http://berlinblackberrydevelopers.blogspot.com/
Developer
misty83
Posts: 745
Registered: ‎01-04-2009
My Device: 8300, 8800, 8700f, 9000

Re: "+" in url

%20 works!! it turned out that i had a problem in different part of code.. not easy to find.. but finally it works :smileyhappy:

 

 thx for help and regards!