我在让 CGI.pm 输出到 HTML5 而不是 XHTML 1.0 或 HTML 4.01 时遇到了一些麻烦。当我尝试"HTML5"
或"HTML 5"
作为-dtd
参数时,start_html()
我得到了 HTML 4 中的文档。我也尝试过 importing :HTML5
,但这似乎也不起作用。有什么建议吗?
4 回答
HTML 5 的正确文档类型只是“html”,而不是“html5”或“html 5”,并且不使用 DTD。CGI.pm 只支持格式良好的 DTD,不支持任意字符串。由于 HTML 5 文档类型不包含格式正确的 DTD,因此 CGI.pm(当前版本为 3.49)不支持 HTML 5 文档类型。
如今,使用 CGI.pm 的 HTML 生成功能通常不受欢迎。模板系统如Template::Toolkit或HTML::Template是首选,因为它们能够清晰地将代码的逻辑与其输出的格式分开。顺便说一句,它们还允许您将任何文档类型和代码指定为您选择的任何版本的 (X)HTML。
这是一些代码的片段,我使用蛮力“解决”了这个问题。
# $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 Mojolicious http://mojolicio.us/
我倾向于在我最新的 Perl 项目中使用 Mojolicious。
所有这些都与强大的 HTML5 应用程序比 CGI 模块更相关。CGI 仍然占有一席之地,并且仍在开发/支持,但它并没有解决健壮的 HTML5 应用程序以及一些现有的框架。
修补模块以添加对 HTML5 的支持……或者只是手动输出一个 Doctype,然后照常使用它。如果它是有效的 XHTML 1.0 或 HTML 4.01,那么它就是有效的 HTML 5。