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

Cyb*_*ull 15 html perl html5 cgi perl-module

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

Dav*_*man 23

  1. HTML 5的正确doctype只是"html",而不是"html5"或"html 5",并且不使用DTD.CGI.pm仅支持格式良好的DTD,而不支持任意字符串.由于HTML 5 doctype不包含格式良好的DTD,因此CGI.pm(截至当前版本,3.49)不支持HTML 5 doctype.

  2. 使用CGI.pm的HTML生成函数现在通常不赞成.诸如Template :: ToolkitHTML :: Template之类的模板化系统因其能够清晰地将代码的逻辑与其输出的格式分开而成为首选.顺便提一下,它们还允许您为所选的任何(X)HTML版本指定任何doctype和代码.


小智 7

这是一些代码片段,我用蛮力解决了这个问题.

# $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;
Run Code Online (Sandbox Code Playgroud)