2010-05-13 72 views
14

我在獲取CGI.pm輸出到HTML5而不是XHTML 1.0或HTML 4.01時遇到了一些麻煩。當我在start_html()中嘗試使用"HTML5""HTML 5"作爲-dtd參數時,我在HTML 4中獲得一個文檔。我也嘗試導入:HTML5,但這似乎也不起作用。有什麼建議?如何獲取CGI.pm以輸出HTML5而不是XHTML 1.0?

+1

請勿使用CGI.pm創建HTML。 :) – 2010-05-14 23:23:27

回答

22
  1. 對HTML 5的正確的doctype只是「HTML」,而不是「HTML5」或「HTML 5」,並且不使用DTD。 CGI.pm只支持格式正確的DTD,不支持任意字符串。由於HTML 5 doctype不包含格式正確的DTD,CGI.pm(截至當前版本,3.49)不支持HTML 5文檔類型。

  2. 使用CGI.pm的HTML生成函數在這些日子裏一般是不被接受的。模板系統(如Template::ToolkitHTML::Template)能夠將您的代碼的邏輯與其輸出的格式完全分開,因此是首選。順便說一下,它們還允許您指定任何類型和代碼,以適用於您選擇的(X)HTML版本。

+0

謝謝。我已經使用Template :: Toolkit實現了一個新版本。你有任何關於HTTP處理模塊的建議嗎? – CyberSkull 2010-06-11 04:57:45

+0

就我個人而言,除了發送Content-Type和一些cookie之外,我從來沒有必須自己做任何低級HTTP的東西,這很簡單,您可以用CGI :: Cookie生成cookie,然後使用'打印'發送一切。如果你發佈另一個問題,解釋你想要做什麼樣的HTTP處理,我相信你會得到一些很好的建議,但。 – 2010-06-11 08:13:26

2

修補模塊以添加對HTML5的支持...或者只是手動輸出Doctype,然後按正常方式使用它。如果它是有效的XHTML 1.0或HTML 4.01,然後它是有效的HTML 5

+0

令人印象深刻的是,最多四人認爲這是值得投票的......但還沒有任何願意說出原因。 – Quentin 2010-05-13 12:46:01

+0

是的,這不是很酷 – Galen 2010-05-13 16:08:53

+0

我認爲人們投票下來,因爲「修補」CPAN模塊通常是一個壞主意。修補可能是不好的建議。繼承或至少有一個猴子補丁聲音更好。 – codeholic 2010-05-13 20:42:10

6

這裏是一些代碼片段,我用蠻力解決了這個問題。

# $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的框架:

催化劑http://www.catalystframework.org/ 舞者http://perldancer.org/documentation Mojolicious http://mojolicio.us/

我傾向於使用Mojolicious我最新的Perl項目傾斜。

所有這些與健壯的HTML5應用程序比CGI模塊更相關。 CGI仍然佔據着自己的位置,並且仍然是開發/支持的,但它並不涉及健壯的HTML5應用程序以及那裏的一些框架。

+0

感謝您的提示! :d – CyberSkull 2011-11-25 22:51:18