[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