2010-05-13 11 views
14

Sto riscontrando qualche problema nell'ottenere CGI.pm per l'output in HTML5 anziché XHTML 1.0 o HTML 4.01. Quando provo "HTML5" o "HTML 5" come argomento -dtd in start_html() ottengo un documento in HTML 4. Ho anche provato a importare :HTML5, ma non sembra funzionare. Qualche consiglio?Come posso ottenere CGI.pm per l'output di HTML5 anziché XHTML 1.0?

+1

Non utilizzare CGI.pm per creare HTML. :) –

risposta

22
  1. Il doctype corretto per HTML 5 è solo "html", non "HTML5" o "HTML 5", e non utilizzare un DTD. CGI.pm supporta solo DTD ben formati, non stringhe arbitrarie. Poiché il doctype HTML 5 non include un DTD ben formato, CGI.pm (a partire dalla versione corrente, 3.49) non supporta il doctype HTML 5.

  2. L'utilizzo delle funzioni di generazione HTML di CGI.pm è generalmente disapprovato in questi giorni. I sistemi di templatura come Template::Toolkit o HTML::Template sono preferiti per la loro capacità di separare in modo pulito la logica del codice dalla formattazione del suo output. Inoltre, ti permettono di specificare qualsiasi doctype e codice per qualsiasi versione di (X) HTML che scegli.

+0

Grazie. Ho implementato una nuova versione utilizzando Template :: Toolkit. Avete suggerimenti per i moduli di gestione HTTP? – CyberSkull

+0

Personalmente, non ho mai dovuto fare alcuna roba HTTP di basso livello oltre all'invio di un Content-Type e alcuni cookie, che è abbastanza semplice da poter farla franca avendo CGI :: Cookie generare i cookie, quindi semplicemente usando ' print' per inviare tutto. Se pubblichi un'altra domanda che spiega esattamente che tipo di gestione HTTP vuoi fare, sono sicuro che otterrai alcuni buoni suggerimenti, comunque. –

2

Patch il modulo per aggiungere supporto per HTML5 ... o semplicemente emettere un Doctype manualmente, quindi usarlo normalmente. Se è validato XHTML 1.0 o HTML 4.01, allora è valida HTML 5.

+0

Impressionante, fino a quattro persone che pensano che valga la pena di votare ... ma non ancora nessuno disposto a dire perché. – Quentin

+0

sì, non è bello – Galen

+0

Penso che la gente stia votando perché "rattoppare" un modulo CPAN è generalmente una cattiva idea. Patching è probabilmente un cattivo consiglio. L'ereditarietà o almeno una patch di scimmia suona meglio. – codeholic

6

Ecco un frammento di un codice in cui ho 'risolto' questo problema usando la forza 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

Ecco alcuni quadri Perl5 che sono HTML5 amichevole:

Catalyst http://www.catalystframework.org/ ballerino http://perldancer.org/documentation Mojolicious http://mojolicio.us/

sto sporgendosi verso usando Mojolicious per il mio progetto più recente Perl.

Tutti questi sono più rilevanti per le app HTML5 robuste rispetto al modulo CGI. CGI ha ancora il suo posto ed è ancora sviluppato/supportato ma non affronta robuste app HTML5 così come alcune delle strutture che sono là fuori.

+0

Grazie per il suggerimento! : D – CyberSkull

Problemi correlati