[Ayuda] [OT] URL Encoding

Gustavo Guillermo Pérez gustavo en compunauta.com
Dom Sep 24 18:22:38 CDT 2006


El Lunes, 18 de Septiembre de 2006 09:00, Miguel Cardenas escribió:
> Holas
>
> Disculpen el off-topic pero bueno ai va... Tengo unas
> funciones para decodificar datos pasados a traves de
> un <FORM> sea por "get" o "post" y ya procesarlos como
> se desee, pero ahora hay una situacion algo distinta,
> no necesito decodificar, sino codificar... Las mismas
> rutinas que tengo podrian modificarse para hacer lo
> mismo pero a la inversa, concretamente mi duda es:
> ¿cuales son los caracteres que se deben codificar? De
> entrada encontre el ':' que se podria confundir como
> parte de una direccion:puerto supongo, el '+' para el
> espacio, 'áéíóú' y caracteres especiales, pero
> quisiera saber si hay un criterio especial o una tabla
> de rangos de caracteres que deban ser codificados.
> Agradecere cualquier comentario o referencia de algun
> documento.
De que lenguaje de programación estamos hablando?
porque yo estoy trabajando con JavaScript y las funciones
 escape y unescape hacen todo, si es Java vienen incluida
s en el nuevo Core les páso un algorítmo.
Este es el algoritmo que usa Java

public static String urlEncode(String Text){
  if (Text==null) return "";
//Do Init
if (notinit){
	int i;
	for (i = 'a'; i <= 'z'; i++) {
	    isNotEncodable.set(i);
	}
	for (i = 'A'; i <= 'Z'; i++) {
	    isNotEncodable.set(i);
	}
	for (i = '0'; i <= '9'; i++) {
	    isNotEncodable.set(i);
	}
	isNotEncodable.set(' '); /* encoding a space to a + is done
				    * in the encode() method */
	isNotEncodable.set('-');
	isNotEncodable.set('_');
	isNotEncodable.set('.');
	isNotEncodable.set('*');
notinit = false;}
  boolean needToChange = false;
  StringBuffer out = new StringBuffer(Text.length());
  int len=Text.length();
	for (int i = 0; i < len; i++) {
	    int c = (int) Text.charAt(i);
	    if (isNotEncodable.get(c)) {
		if (c == ' ') {
		    c = '+';
		    needToChange = true;
		}
		out.append((char)c);
	    } else {
		    out.append('%');
		    char ch = Character.forDigit((c >> 4) & 0xF, 16);
		    if (Character.isLetter(ch)) {ch -= caseDiff;}
		    out.append(ch);
		    ch = Character.forDigit(c & 0xF, 16);
		    if (Character.isLetter(ch)) {ch -= caseDiff;}
		    out.append(ch);
                    needToChange = true;
		}//end if

	}//end for;

	return (needToChange? out.toString() : Text);
-- 
Gustavo Guillermo Pérez
Compunauta uLinux
www.compunauta.com

 
_______________________________________________
Ayuda mailing list
Ayuda en linux.org.mx
Para salir de la lista: http://mail.linux.org.mx/cgi-bin/mailman/listinfo/ayuda/



Más información sobre la lista de distribución Ayuda