16

我在让 CGI.pm 输出到 HTML5 而不是 XHTML 1.0 或 HTML 4.01 时遇到了一些麻烦。当我尝试"HTML5""HTML 5"作为-dtd参数时,start_html()我得到了 HTML 4 中的文档。我也尝试过 importing :HTML5,但这似乎也不起作用。有什么建议吗?

4

4 回答 4

23
  1. HTML 5 的正确文档类型只是“html”,而不是“html5”或“html 5”,并且不使用 DTD。CGI.pm 只支持格式良好的 DTD,不支持任意字符串。由于 HTML 5 文档类型不包含格式正确的 DTD,因此 CGI.pm(当前版本为 3.49)不支持 HTML 5 文档类型。

  2. 如今,使用 CGI.pm 的 HTML 生成功能通常不受欢迎。模板系统如Template::ToolkitHTML::Template是首选,因为它们能够清晰地将代码的逻辑与其输出的格式分开。顺便说一句,它们还允许您将任何文档类型和代码指定为您选择的任何版本的 (X)HTML。

于 2010-05-13T08:54:55.357 回答
8

这是一些代码的片段,我使用蛮力“解决”了这个问题。

# $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;
于 2011-04-04T15:10:21.650 回答
3

以下是一些对 HTML5 友好的 Perl5 框架:

催化剂http://www.catalystframework.org/ 舞者http://perldancer.org/documentation Mojolicious http://mojolicio.us/

我倾向于在我最新的 Perl 项目中使用 Mojolicious。

所有这些都与强大的 HTML5 应用程序比 CGI 模块更相关。CGI 仍然占有一席之地,并且仍在开发/支持,但它并没有解决健壮的 HTML5 应用程序以及一些现有的框架。

于 2011-11-25T14:52:51.787 回答
2

修补模块以添加对 HTML5 的支持……或者只是手动输出一个 Doctype,然后照常使用它。如果它是有效的 XHTML 1.0 或 HTML 4.01,那么它就是有效的 HTML 5。

于 2010-05-13T08:52:34.140 回答