Como faço para obter CGI.pm de saída HTML5 em vez de XHTML 1.0?
-
26-09-2019 - |
Pergunta
Eu estou tendo alguns problemas na obtenção de CGI.pm, a saída para o HTML5 em vez de XHTML 1.0 ou HTML 4.01.Quando eu tento "HTML5"
ou "HTML 5"
como o -dtd
argumento start_html()
Eu recebo um documento em HTML 4.Eu também tentei importar :HTML5
, mas que não parecem funcionar.Algum conselho?
Solução
O doctype correto para HTML 5 é apenas "html", não "html5" ou "html 5" e não usa um DTD. O CGI.PM suporta apenas DTDs bem formados, não strings arbitrários. Como o HTML 5 Doctype não inclui um DTD bem formado, o CGI.PM (na versão atual, 3.49) não suporta o HTML 5 Doctype.
O uso das funções de geração HTML do CGI.PM geralmente é desaprovado nos dias de hoje. Sistemas de modelos, como Modelo :: Toolkit ou HTML :: Modelo são preferidos por sua capacidade de separar de forma limpa a lógica do seu código da formatação de sua saída. Eles também, aliás, permitem especificar qualquer Doctype e código para qualquer versão do (x) html que você escolher.
Outras dicas
Aqui está um fragmento de algum código em que 'resolvi' esse problema usando força 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;
Aqui estão algumas Perl5 quadros que são HTML5 amigável:
Catalisador http://www.catalystframework.org/ Dançarina http://perldancer.org/documentation Mojolicious http://mojolicio.us/
Eu estou inclinado para o uso de Mojolicious para o meu mais novo Perl do projeto.
Todos estes são mais relevantes para uma robusta de aplicativos HTML5 do que o módulo CGI.CGI ainda tem o seu lugar e ainda é desenvolvido/suporte, mas não o endereço robustos aplicativos HTML5, bem como alguns dos quadros que estão lá fora.
Patch o módulo para adicionar suporte para html5 ... ou apenas produzir um doctype manualmente e use -o normalmente. Se for válido xhtml 1.0 ou html 4.01, é válido HTML 5.