Sab May 13, 2006 5:16 pm
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 239
Ubicación: Colombia
|
|
| Como pasar los caracteres +, = |
|
|
Es un grave problema y no le encuentro solución:
Trabajo con ficheros y no sé cómo hago para pasar los caracteres +, = de los campos de un fomulario, sin que los afecte la lectura de parámetros, más exactamente la partición "split".
ej: campo1=rata&nombre=alberto+castillo&taghtml=<font+color="rojo">
lo que quiero es que el valor de taghtml me pase completo y no puedo lograrlo. ¿cómo hago esto? |
|
|
|

Dom May 14, 2006 6:59 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
No acabo de entender el problema.
Si lo que quieres es codificar los valores que extraes de un fichero de texto para pasarlo a un formulario, necesitas pasar esos valores por una función de escapado para convertirlo a un URI:
| Código: |
| perl -MURI::Escape -le '$x=q(<font color="red">); print uri_escape($x)' # %3Cfont%20color%3D%22red%22%3E |
Si quieres hacer el proceso inverso, leer de ficheros de texto unos URI y parsearlos, puedes intentar hacer algo como esto:
| Código: |
1 #!/usr/bin/perl -l
2 use warnings;
3 use strict;
4
5 my $texto = "campo1=rata&nombre=alberto+castillo&taghtml=%3Cfont%20color%3D%22red%22%3E";
6
7 my @items = split "&", $texto;
8 foreach my $item ( @items ) {
9 my ( $var, $value ) = split "=", $item, 2;
10
11 $value =~ s/\+/ /g;
12 $value =~ s/%(..)/chr(eval "0x$1")/ge;
13
14 print "$var => $value";
15 } |
sale
| Código: |
campo1 => rata
nombre => alberto castillo
taghtml => <font color="red"> |
De todas formas... todo eso ya está hecho en forma de módulos:
| Código: |
use Data::Dumper;
use CGI;
$query = new CGI(qq(campo1=rata&nombre=alberto+castillo&taghtml=%3Cfont%20color%3D%22red%22%3E));
print Dumper $query->Vars; |
sale
| Código: |
$VAR1 = 'campo1';
$VAR2 = 'rata';
$VAR3 = 'nombre';
$VAR4 = 'alberto castillo';
$VAR5 = 'taghtml';
$VAR6 = '<font color="red">'; |
|
|

Dom May 14, 2006 8:20 am
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 239
Ubicación: Colombia
|
|
|
|
|
Aunque más concretamente mi problema es este:
Tengo un formulario HTML y tengo un campo donde las personas escribirán un código en html; lo que quiero es que cuando pase la información de mi formulario por get o post a mi CGI, no me afecte los caracteres +,=, ya que la función split me parte en dos, cada vez que encuentra un =.
Todo porque tengo un editor de esos wysiwyg y quiero grabar en un fichero el código html que provenga de él. |
|

Dom May 14, 2006 10:21 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
Te aconsejo que uses el módulo CGI ya que, como ves en el segundo ejemplo, lo que recibe desde el formulario es automáticamente convertido al texto original escrito por el usuario.
Si quieres usar el truco del split, fíjate en el primer ejemplo. Primero hacemos un split con el carácter '&' para separar cada uno de los pares etiqueta-valor y luego, por cada uno de esos pares, usamos la función split con un tercer parámetro, que es un '2', para que sólo parta el par por el primer '='. De esa forma no tiene en cuenta el resto de '=' que posiblemente existan en el lado del valor. |
|

Dom May 14, 2006 11:18 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
Cuando mandas un formulario todos los caracteres especiales son codificados para evitar el tipo de problemas que estás buscando evitar (valga la redundancia). Así que realmente no debes de preocuparte por eso, pues eso es solucionado automáticamente.
Lo que si te recomiendo es que hagas tu envío por medio de POST, para evitar una línea gigantesca en la barra de locación de tus usuarios, y pues del lado de tu cgi que uses el módulo CGI.pm para recibir los datos:
| Código: |
use CGI;
my $query = new CGI;
my %Input = $query->Vars;
|
Saludos |
|

Dom May 14, 2006 12:03 pm
|
 |
danimera
Perlero Adicto

|
Registrado: 23 Jun 2005
Mensajes: 239
Ubicación: Colombia
|
|
| Solucionado el problema |
|
|
Bueno, lo que me dice explorer lo utilicé y me funcionó genial, en cambio lo de kidd, no, el me codifica todo, pero los iguales '=', me los parte ya lo probé y no pasan. Bueno por el módulo CGI no lo he intentado, puesto se lo estoy aplicando a una aplicación que es con HTML:Template.
Pero gracias a su ayuda, ya solucioné este inconveniente. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|