2010-05-13 12 views
14

Tengo problemas para hacer que CGI.pm emita resultados en HTML5 en lugar de XHTML 1.0 o HTML 4.01. Cuando intento "HTML5" o "HTML 5" como el argumento -dtd en start_html() obtengo un documento en HTML 4. También he intentado importar :HTML5, pero eso tampoco parece funcionar. ¿Algún consejo?¿Cómo obtengo que CGI.pm emita HTML5 en lugar de XHTML 1.0?

+1

No use CGI.pm para crear HTML. :) –

Respuesta

22
  1. El tipo de documento correcto para HTML 5 es simplemente "html", "no" o "HTML 5 HTML 5", y no utiliza una DTD. CGI.pm solo admite DTD bien formadas, no cadenas arbitrarias. Como el doctype HTML 5 no incluye una DTD bien formada, CGI.pm (a partir de la versión actual, 3.49) no admite el doctype HTML 5.

  2. El uso de las funciones de generación de HTML de CGI.pm generalmente está mal visto en estos días. Los sistemas de plantilla como Template::Toolkit o HTML::Template son preferidos por su capacidad de separar limpiamente la lógica de su código del formato de su salida. También, por cierto, le permiten especificar cualquier tipo de documento y código a la versión de (X) HTML que elija.

+0

Gracias. Implementé una nueva versión al usar Template :: Toolkit. ¿Tiene alguna recomendación para los módulos de manejo de HTTP? – CyberSkull

+0

Personalmente, nunca he tenido que hacer ningún tipo de material HTTP de bajo nivel más allá de enviar un tipo de contenido y algunas cookies, que es lo suficientemente simple como para hacer que CGI :: Cookie genere las cookies, y luego simplemente ' print' para enviarlo todo. Si publica otra pregunta explicando exactamente qué tipo de manejo de HTTP desea hacer, estoy seguro de que obtendrá algunas buenas sugerencias. –

2

Parchee el módulo para agregar soporte para HTML5 ... o simplemente envíe un Doctype manualmente, luego úselo de la forma habitual. Si es válido XHTML 1.0 o HTML 4.01 entonces es válida HTML 5.

+0

Impresionante, hasta cuatro personas piensan que vale la pena votar ... pero que aún no están dispuestos a decir por qué. – Quentin

+0

sí, eso no es genial – Galen

+0

Creo que la gente está votando porque "parchear" un módulo de CPAN es generalmente una mala idea. El parche es un mal consejo. La herencia o al menos un parche de mono suenan mejor. – codeholic

6

Aquí hay un fragmento de algún código donde 'resolví' este problema usando la fuerza bruta.

# $html is accumulator for HTML string 
my $html; 

# <html> tag and <head> section 
my $dtd  = '<!DOCTYPE html>'; # HTML5 DTD 
my $title = "Storage analysis of $HOSTNAME as of $TODAY"; 
$html .= start_html(
    -title => $title, 
    -style => { 
     -code => $css, 
    } 
); 

# KLUDGE: CGI.pm doesn't support HTML5 DTD; replace the one it puts in. 
$html =~ s{<!DOCTYPE.*?>}{$dtd}s; 
3

Éstos son algunos marcos Perl5 que son HTML5 amigable:

Catalizador http://www.catalystframework.org/ bailarín http://perldancer.org/documentation Mojolicious http://mojolicio.us/

Me estoy inclinando hacia el uso de Mojolicious para mi proyecto más reciente de Perl.

Todos estos son más relevantes para aplicaciones robustas HTML5 que para el módulo CGI. CGI todavía tiene su lugar y todavía está desarrollado/admitido, pero no aborda sólidas aplicaciones HTML5, así como algunos de los marcos que existen.

+0

¡Gracias por el consejo! :RE – CyberSkull

Cuestiones relacionadas