使用 Perl CGI 時,它總是在列印出 html 正文的其余部分之前列印出:<"DOCTYPE html"....> 標頭,這會破壞網頁的正確顯示。我猜原因是 DOCTYPE 仍然參考了一個非常舊的 HTML 版本。無論我何時使用 $query->start_html(...); 都會生成第一行。所以問題是,如何防止生成 <!DOCTYPE...> 行?當我洗掉該 DOCTYPE 行時,我的網頁在此之后正常運行。非常感謝任何見解。謝謝!
uj5u.com熱心網友回復:
瀏覽器將使用該DOCTYPE定義來決定是否以Quirks 模式解釋 HTML(或 XHTML)檔案。我認為這就是您所說的“弄亂了網頁的正確顯示”的意思——您正在小心地創建有效的 HTML5,但是瀏覽器進入了 Quirks 模式并且頁面看起來不正確。
您想要的是標準的 HTMLDOCTYPE定義。
<!DOCTYPE html>
不幸的是,CGI.pm 中的 HTML 生成函式沒有維護,并且不支持 HTML5。所以你不能讓模塊生成 this DOCTYPE。
老實說,您最好的方法是停止使用所有 HTML 生成功能,而改用基于模板的方法。但我可以看到這將是一項艱巨的作業,所以在短期內,也許你可以停止使用start_html(). 用包含您想要的文本的 heredoc 替換呼叫應該不會太難。
更新:下面昆汀的評論讓我思考。當我說:
您正在仔細創建有效的 HTML5,但瀏覽器進入 Quirks 模式并且頁面看起來不正確
我完全錯了。如果您在沒有的情況下獲得所需的瀏覽器行為DOCTYPE,那么您希望將瀏覽器置于 Quirks 模式。這要容易得多。使用我在上面鏈接的 Wikipedia 文章中的資訊,您可以看到 HTML 4.01 Transitional 是最新的DOCTYPE,它將使所有現代瀏覽器進入 Quirks 模式。所以你可以使用它DOCTYPE。
$ perl -MCGI=:html -E'say start_html(-dtd => "-//W3C//DTD HTML 4.01 Transitional//EN")'
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Untitled Document</title>
</head>
<body>
這應該讓瀏覽器按照你的意愿作業。
但是依賴 Quirks 模式是脆弱的。我建議您考慮修復您的 HTML 和 CSS,以便當瀏覽器處于標準模式時它們可以正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/439351.html
