我在将CGI.pm输出到HTML5而不是XHTML 1.0或HTML 4.01时遇到了一些麻烦。当我在"HTML5"
中尝试"HTML 5"
或-dtd
作为start_html()
参数时,我会在HTML 4中获得一个文档。我也尝试导入:HTML5
,但是似乎也没有用。有什么建议吗?
答案 0 :(得分:23)
HTML 5的正确doctype只是“html”,而不是“html5”或“html 5”,并且不使用DTD。 CGI.pm仅支持格式良好的DTD,而不支持任意字符串。由于HTML 5 doctype不包含格式良好的DTD,因此CGI.pm(截至当前版本,3.49)不支持HTML 5 doctype。
目前使用CGI.pm的HTML生成函数通常不赞成。诸如Template::Toolkit或HTML::Template之类的模板化系统因其能够清晰地将代码的逻辑与其输出的格式分开而成为首选。顺便提一下,它们还允许您为所选的任何(X)HTML版本指定任何doctype和代码。
答案 1 :(得分: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;
答案 2 :(得分:3)
以下是一些HTML5友好的Perl5框架:
催化剂http://www.catalystframework.org/ 舞者http://perldancer.org/documentation Mojolicious http://mojolicio.us/
我倾向于将Mojolicious用于我最新的Perl项目。
所有这些都比强大的HTML5应用程序更适用于CGI模块。 CGI仍然有它的位置,仍然是开发/支持但它没有解决强大的HTML5应用程序以及那里的一些框架。
答案 3 :(得分:2)
修补模块以添加对HTML5的支持...或者只是手动输出Doctype,然后照常使用它。如果它是有效的XHTML 1.0或HTML 4.01,则它是有效的HTML 5。