CGI.pm を XHTML 1.0 または HTML 4.01 ではなく HTML5 に出力するのに問題があります。"HTML5"
or"HTML 5"
を-dtd
引数として実行するstart_html()
と、HTML 4 でドキュメントが取得されます:HTML5
。何かアドバイス?
4 に答える
HTML 5 の正しい doctype は、"html5" や "html 5" ではなく "html" であり、DTD を使用しません。CGI.pm は整形式の DTD のみをサポートし、任意の文字列はサポートしません。HTML 5 doctype には整形式の DTD が含まれていないため、CGI.pm (現在のバージョン 3.49) は HTML 5 doctype をサポートしていません。
CGI.pm の HTML 生成関数を使用することは、最近では一般的に嫌われています。Template::ToolkitやHTML::Templateなどのテンプレート システムは、コードのロジックを出力の書式設定から明確に分離できるため、推奨されます。また、偶然にも、選択した (X)HTML のどのバージョンに対しても、どのような doctype とコードを指定することもできます。
これは、ブルートフォースを使用してこの問題を「解決」したコードの一部です。
# $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;
HTML5 に適した Perl5 フレームワークを次に示します。
カタリストhttp://www.catalystframework.org/ ダンサーhttp://perldancer.org/documentation モジョリシャスhttp://mojolicio.us/
私は最新の Perl プロジェクトに Mojolicious を使用することに傾いています。
これらはすべて、CGI モジュールよりも堅牢な HTML5 アプリに関連しています。CGI はまだその場所を持っており、開発/サポートされていますが、堅牢な HTML5 アプリやいくつかのフレームワークには対応していません。
モジュールにパッチを適用して HTML5 のサポートを追加するか、Doctype を手動で出力し、通常どおり使用します。有効な XHTML 1.0 または HTML 4.01 であれば、有効な HTML 5 です。