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

发布于 2024-09-01 12:56:22 字数 227 浏览 6 评论 0原文

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

I'm having some trouble getting CGI.pm to output to HTML5 instead of XHTML 1.0 or HTML 4.01. When I try "HTML5" or "HTML 5" as the -dtd argument in start_html() I get a document in HTML 4. I've also tried importing :HTML5, but that doesn't seem to work either. Any advice?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

落花浅忆 2024-09-08 12:56:22
  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 指定任何文档类型和代码。

  1. The correct doctype for HTML 5 is just "html", not "html5" or "html 5", and does not use a DTD. CGI.pm only supports well-formed DTDs, not arbitrary strings. Since the HTML 5 doctype does not include a well-formed DTD, CGI.pm (as of the current version, 3.49) does not support the HTML 5 doctype.

  2. Using CGI.pm's HTML-generation functions is generally frowned upon these days. Templating systems such as Template::Toolkit or HTML::Template are preferred for their ability to cleanly separate your code's logic from the formatting of its output. They also, incidentally, allow you to specify whatever doctype and code to whatever version of (X)HTML you choose.

不喜欢何必死缠烂打 2024-09-08 12:56:22

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

# $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;

Here's a fragment from some code where I 'solved' this problem using brute force.

# $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;
记忆消瘦 2024-09-08 12:56:22

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

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

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

所有这些都比 CGI 模块更适合强大的 HTML5 应用程序。 CGI 仍然占有一席之地,并且仍在开发/支持,但它不能解决强大的 HTML5 应用程序以及一些现有框架的问题。

Here are some Perl5 frameworks that are HTML5 friendly:

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

I'm leaning toward using Mojolicious for my newest Perl project.

All of these are more relevant for robust HTML5 apps than the CGI module. CGI still has its place and is still developed/supported but it does not address robust HTML5 apps as well as some of the frameworks that are out there.

故事还在继续 2024-09-08 12:56:22

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

Patch the module to add support for HTML5 … or just output a Doctype manually, then use it as normal. If it is valid XHTML 1.0 or HTML 4.01 then it is valid HTML 5.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文