如何让CGI.pm输出HTML5而不是XHTML 1.0?

16

我在使用CGI.pm输出HTML时遇到了一些问题,无法将其输出为HTML5而只能是XHTML 1.0或HTML 4.01。当我尝试将"HTML5""HTML 5" 作为start_html()函数中的-dtd参数时,得到的文档仍然是HTML 4。我也尝试过导入:HTML5,但似乎也没有用。请问有何建议?


1
不要使用CGI.pm来创建HTML。 :) - brian d foy
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所需的文档类型和代码。


谢谢。我已经使用Template::Toolkit实现了一个新版本。你有没有什么关于HTTP处理模块的建议? - CyberSkull
就我个人而言,除了发送Content-Type和一些cookies之外,我从未自己处理过任何低级HTTP内容。这很简单,你可以让CGI::Cookie生成cookies,然后只需使用“print”将其全部发送即可。如果您发布另一个问题,解释您想要处理的HTTP类型,我相信您会得到一些好建议。 - Dave Sherohman

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;

3
以下是一些对 HTML5 友好的 Perl5 框架:
Catalyst http://www.catalystframework.org/ Dancer http://perldancer.org/documentation Mojolicious http://mojolicio.us/ 我倾向于在我的最新 Perl 项目中使用 Mojolicious。
所有这些框架都比 CGI 模块更适用于强大的 HTML5 应用程序。CGI 仍然有其位置,并且仍在开发/支持,但它不如一些现有的框架能够很好地处理强大的 HTML5 应用程序。

2

更新模块,以支持HTML5……或手动输出Doctype,然后像往常一样使用它。如果它是有效的XHTML 1.0或HTML 4.01,则它也是有效的HTML 5。


5
你需要先编写补丁,然后将补丁发送给作者。 ;) - hobbs
1
补丁并不是一个坏主意,但使用CGI.pm来创建HTML是一个坏主意。这使得修补CGI.pm以制作HTML 5成为一个坏主意。 - brian d foy
1
这并不是一个有用的建议,我现在没有心情写一个模块,我只想升级一些旧脚本。 - CyberSkull
1
“仅仅打补丁”通常不是一个有用的答案,特别是当它被如此平淡地说出来时,好像每个人都经常这样做一样。现在我已经查看了CGI.pm,它似乎是旨在本地编辑以调整各种全局默认值;这个答案本可以提到这一点。它还可以给出一些关于从超过7600行代码中开始进行更改的指导。 - Rob Kennedy
4
请注意这是一个旧问题(和评论),但一次又一次地,人们谈论使用CGI.pm创建HTML是一个糟糕的想法。如果您愿意承担性能损失,我认为这些人没有什么好的反驳理由。它是功能编程,这很棒,因为如果您在维护函数时小心谨慎,它更具有未来性。我不明白Catalyst / Mojolicious如何比Mason更好,后者实现和使用都很痛苦。 - vol7ron
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接