我在使用CGI.pm输出HTML时遇到了一些问题,无法将其输出为HTML5而只能是XHTML 1.0或HTML 4.01。当我尝试将"HTML5"
或 "HTML 5"
作为start_html()
函数中的-dtd
参数时,得到的文档仍然是HTML 4。我也尝试过导入:HTML5
,但似乎也没有用。请问有何建议?
我在使用CGI.pm输出HTML时遇到了一些问题,无法将其输出为HTML5而只能是XHTML 1.0或HTML 4.01。当我尝试将"HTML5"
或 "HTML 5"
作为start_html()
函数中的-dtd
参数时,得到的文档仍然是HTML 4。我也尝试过导入:HTML5
,但似乎也没有用。请问有何建议?
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……或手动输出Doctype,然后像往常一样使用它。如果它是有效的XHTML 1.0或HTML 4.01,则它也是有效的HTML 5。