• Publicidad

Salida HTML en español

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Salida HTML en español

Notapor Carlos2012 » 2012-03-03 13:39 @610

¡Buenas tardes a todos!

Estoy comenzando con Perl y con CGI. Tengo un programa en Perl cuya salida en HTML no me imprime en caracteres utf8. Os dejo el código HTML y el código CGI.

Primero el html (prueba.html):
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
  2.  
  3. <html>
  4.   <head>
  5.     <title>Prueba de CGI</title>
  6.   </head>
  7.   <body>
  8.     <p>Pregunta lo que quieras saber</p>
  9.     <form method="POST" action="http://localhost/cgi-bin/prueba.cgi">
  10.       <p><input type="text" name="consulta" size=36><input type="submit" value="Enviar"></p>
  11.  
  12.     </form>
  13.      </body>
  14. </html>
  15.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Ahora el programa CGI (prueba.cgi)
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use CGI;
  4.  
  5. binmode STDOUT, ":encoding(ISO-8859-1)";
  6.  
  7. # almacenamos el contenido de la variable POST en $buffer
  8. read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  9. ($campo, $consulta) = split(/=/, $buffer);
  10. print "Content-type: text/html\n\n";
  11.  
  12. #print "<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">\n";
  13. print "<html><head><title>Mensaje de bienvenida</title></head>\n";
  14. print "<body>\n";
  15. print "<h1>Bienvenido</h1>\n";
  16. print "Tu pregunta es $consulta \n";
  17. print "</body></html>\n";
  18.  
  19.  
  20.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


EL caso es que si en la entrada del archivo HTML pongo "¿Quién fue Nikola Tesla?", en el HTML de salida pone "Tu pregunta es %BFqui%E9n+fue+Nikola+Tesla%3F"

¿Cómo se puede poner para que la salida sea "¿Quién fue Nikola Tesla?"

Muchas gracias a todos por vuestra ayuda. Me parece un foro muy interesante.

SalU2.
Última edición por explorer el 2012-03-03 14:30 @645, editado 1 vez en total
Razón: Marcas de código Perl
Carlos2012
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-03-03 13:28 @603

Publicidad

Re: Salida HTML en español

Notapor explorer » 2012-03-03 14:43 @655

Bienvenido a los foros de Perl en español, Carlos2012.

Fíjate en una cosa: al principio del programa dices que vas a usar las facilidades que te da el módulo CGI, pero luego no lo usas en el resto del programa. Estás leyendo el STDIN de forma directa, usando CONTENT_LENGTH, haciendo el split(), y luego sacando el resultado en el propio código HTML.

Fíjate, en cambio, cómo se puede hacer un cgi en Perl con la ayuda del módulo CGI.

Entrando en materia... el formulario está en una página que está codifica en iso-8859-1 (eso es lo que pone en la primera línea del html), así que será normal que lo que recibas por parte del usuario que responde al formulario también esté escrito en esa codificación.

Recogiendo el valor de param("consulta") obtendrás el texto que quieres (ya convertidos los '+' a espacios y los caracteres escapados %XX a caracteres normales).

Perl, por defecto, trabaja en iso-8859-1 (bueno, depende de la versión de Perl que estés usando, que no sabemos cuál es). Así que la línea 5, sobra (la salida estándar también está por defecto en iso-8859-1).

Pero... dices que quieres tener el resultado en codificación utf-8... Entonces, lo que tienes que hacer es cambiar la línea 5 por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. binmode STDOUT, ":encoding(UTF-8)";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Perl hará las conversiones entre las dos codificaciones.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Salida HTML en español

Notapor irving » 2012-03-03 16:32 @730

Esto te puede servir si vas a usar el módulo CGI.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use CGI ':standard';
  4.  
  5. print header(-charset => utf8);
  6. print "<h1>Hola Perl</h1>";
  7. # HTML...
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Búscame en twitter
Avatar de Usuario
irving
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-02-23 16:01 @709
Ubicación: Chiclayo, Lambayeque, Perú

Re: Salida HTML en español

Notapor explorer » 2012-03-03 18:07 @796

Incluso puede sustituir
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print "<h1>Hola Perl</h1>";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print h1('Hola Perl');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Salida HTML en español

Notapor Carlos2012 » 2012-03-04 04:13 @217

Muchas gracias por vuestras respuestas y por vuestra ayuda.

Siguiendo el consejo de explorer, he intentado utilizar el módulo CGI y utilizar param('consulta').

El caso es que hay algo que estoy haciendo mal y llevo desde ayer sin dar con la solución. Aquí os la planteo:

Archivo cgi:
Sintáxis: [ Descargar ] [ Ocultar ]
  1. #!/usr/bin/perl  
  2. use CGI; 
  3.  
  4. my $q=new CGI; 
  5. my $consulta; 
  6.  
  7. print $q->header("text/html"); 
  8. print $q->start_html(-title=>"Tu pregunta"); 
  9. print"\n"; 
  10.  
  11. $consulta =$q->param('consulta'); 
  12.  
  13. print" Tu consulta es: $nombre \n"; 
  14. print $q->end_html(); 


El caso es que me sale un error 500 por lo que entiendo que hay algún error en el código.

¿Qué creéis que se me está escapando? Por cierto, la versión que tengo es Perl 5.10.1

SalU2.
Carlos2012
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-03-03 13:28 @603

Re: Salida HTML en español

Notapor explorer » 2012-03-04 17:21 @764

Creo que en la línea 13 deberías cambiar $nombre por $consulta :)

Lo del error 500 no lo sabemos. Deberías mirar qué mensaje sale en los registros de actividad (log) del servidor web, sobre todo en el error.log.

Si usas CGI::Carp (vuelve a ver mi enlace a mi CGI mínimo), Perl sacará el mensaje de error en la ventana del navegador, y así tendrás más pistas.

Podría ser un tema de permisos de ejecución del programa cgi.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Salida HTML en español

Notapor Carlos2012 » 2012-03-05 14:45 @656

¡Vaya despiste! Madre mía :oops: :oops:

He utilizado también esta vez el módulo CGI::Carp y la verdad es que es de gran ayuda.

Muchas gracias, maestro. :wink:

SalU2
Carlos2012
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2012-03-03 13:28 @603


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron