Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Web » Codificación cgi  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 3 mensajes ] 
 
Nota 2011-05-01 12:10 @549

Perlero Nuevo
Registrado: 2011-05-01 12:04 @544
Mensajes: 4
Codificación cgi  RESUELTO
Hola amigos, este foro me es muy útil en mis andanzas con Perl, aunque no me había registrado hasta ahora, que tengo un problemilla que no puedo solucionar :oops:

La cosa es que tengo problemas con la codificación en un cgi. Desde un formulario, se debe mandar una dirección web al script y éste debe generar un resultado y mostrarlo en formato web, obviamente. El caso es que los caracteres no salen correctamente. He probado a especificar en la cabecera del html la codificación, y también la he especificado en el script pero sigue sin funcionar:

Syntax: [ Download ] [ Hide ]
Using html4strict Syntax Highlighting
  1. <html>
  2.     <head>
  3.         <title>Nube de etiquetas</title>
  4.     </head>
  5.     <body>
  6.         <form action="http://localhost/cgi-bin/prueba.pl" method="POST">
  7.             <h3>Web para nube de etiquetas :&nbsp;<h3>
  8.             <p> <input type="text" name="url" size=30> </p>
  9.             <input type="submit" value="Enviar" name="B1">
  10.         </form>
  11.     </body>
  12. </html>
  13.  


Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use utf8;
  4. binmode( STDOUT, ":utf8" );
  5.  
  6. print "Content-type:text/html\n\n";
  7. print
  8.     "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />";
  9.  
  10. read( STDIN, $line, $ENV{'CONTENT_LENGTH'} );
  11. @values = split( /&/, $line );
  12.  
  13. print "<html><head><title>Parsing with POST method</title></head>";
  14. print "<body>\n";
  15. print "<h2>These were the values sent</h2>\n";
  16.  
  17. foreach $i (@values) {
  18.  
  19.     ( $varname, $data ) = split( /=/, $i );
  20.     if ( $varname ne "B1" ) {
  21.         print "The variable is $varname, the value is $data<p>";
  22.     }
  23. }
  24.  
  25. print "</body></html>\n";
  26.  


El resultado es así:

The variable is url, the value is http://www.elpais.com%2Frss%2Ffeed.html ... Id%3D17041

Espero que podáis ayudarme...

Un saludo.


Nota 2011-05-01 19:38 @860
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Codificación cgi
Bienvenido a los foros de Perl en español, JavierMolina.

Yo veo varios problemas...

  • Estás enviando una marca <meta> en la que indicas que el resto del código HTML va a ir en codificación iso-8859-1, pero resulta que no es así: en la línea 4 estás indicando que todo lo que salga por STDOUT ha de ir codificado en utf8, así que es normal que los caracteres acentuados salgan mal
  • Los caracteres que muestran la URL están bien codificados. Es así, realmente, como ha sido enviado desde el navegador del usuario a tu programa CGI. Lo que te queda por hacer es descodificarles. Esto lo tienes explicado en el perldoc perlfaq9, en la sección How do I decode or create those %-encodings on the web?, que es usando la función uri_unescape() del módulo URI::Escape, aunque también explica cómo hacerlo de forma directa
  • No estás usando el módulo CGI, que te ayudaría a reducir el código bastante. Por ejemplo, se encargaría de hacer toda la lectura e interpretación de los parámetros pasados por el usuario, de tal manera que en tu programa solo tendrías que poner un my $url = param('url'); para recibir el parámetro del mismo nombre que el formulario está recibiendo. Mira mi CGI mínimo para que veas un ejemplo de lo que se puede hacer.

_________________
JF^D Perl programming


Nota 2011-05-02 03:32 @189

Perlero Nuevo
Registrado: 2011-05-01 12:04 @544
Mensajes: 4
Re: Codificación cgi
Muchas gracias explorer.

El primer punto que señalas ya lo sabía. Solamente estaba haciendo un montón de pruebas a ver si funcionaba, pero como siempre a lo loco :lol:. Respecto al segundo punto, también lo había visto y juraría que lo probé sin obtener resultado, ya estaba casi decidido a hacer yo mismo la conversión de la codificación mediante expresiones regulares.

Lo que me ha sorprendido es tu CGI mínimo, no por la minimalidad si no por el hecho de que las direcciones se decodifican correctamente sin incluir nada más, supongo que será por el módulo CGI que no estaba usando.

Un gran aporte, debería estar en algún manual de CGI :D

¡Muchas gracias!


Responder al tema  [ 3 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO