lunes, 11 de abril de 2011

URL Encoder para J2ME

URL Encoder para J2ME




Fíjese en esta URL de ejemplo:


http://miservidor.com/miservletpost/?cedula=12.121.121&nombre=juan perez&direccion=direccion de pruebas con espacios y otros caracteres especiales como estos: \?


Notese que tiene espacios, caracteres especiales en el campo de ejemplo 'direccion' (caracteres ":\?"), que pueden ser confundidos con caracteres reservados propios del protocolo http u otros del sistema operativo o del explorador de internet. Esta url de pruebas no podrá ser enviada a través de una conexión Http sin dañarse.


La dirección de pruebas que hemos puesto es y debe ser almacenada así en el servidor (en un caso de ejemplo):
"direccion de pruebas con espacios y otros caracteres especiales como estos: \?"


Por tanto para que pueda llegar así al servidor de destino con el propósito de ser almacenada entonces debe ser codificada para ser transportada seguramente a través de una conexión http.


Aquí es donde entra la función URLEncode, esta función está disponible fácilmente en el paquete java.lang de J2EE o J2SE, pero no tan fácilmente en J2ME.


Para resolver, se codifica la URL, y esta quedaría así:
http://miservidor.com/miservletpost/?cedula=12.121.121&nombre=juan%20perez&direccion=direccion%20de%20pruebas%20con%20espacios%20y%20otros%20caracteres%20especiales%20como%20estos:%20%5C?


Esta URL si es segura y puede ser transportada al servidor, en donde deberá ser decodificada. En php se puede decodificar fácilmente usando una llamada a urldecode("cadena codficada").


Como referencia puede revisar:


PHP:
http://php.net/manual/es/function.urlencode.php
http://www.php.net/manual/es/function.urldecode.php


JAVA:
http://download.oracle.com/javase/1.5.0/docs/api/java/net/URLEncoder.html


J2ME Información:
http://developers.sun.com/mobility/midp/ttips/HTTPPost/


Para JavaME, use la siguiente rutina:


   static public String urlEncode(String sUrl) 
   {
        StringBuffer urlOK = new StringBuffer();
        for(int i=0; i<sUrl.length(); i++) 
        {
            char ch=sUrl.charAt(i);
            switch(ch)
            {
                case '<': urlOK.append("%3C"); break;
                case '>': urlOK.append("%3E"); break;
                case '/': urlOK.append("%2F"); break;
                case ' ': urlOK.append("%20"); break;
                case ':': urlOK.append("%3A"); break;
                case '-': urlOK.append("%2D"); break;
                default: urlOK.append(ch); break;
            } 
        }
        return urlOK.toString();
    }

1 comentario: