【发布时间】:2019-09-05 18:08:44
【问题描述】:
让我的 Perl CGI 脚本呈现 HTML 时遇到了很多麻烦。它一直将 HTML 输出为纯文本。我什至尝试使用print header("text/html");
下面的代码有什么问题吗? -
use CGI qw(:standard);
# other code
print header("text/html");
# also tried just print header;
my $banner = "Some text";
print start_html($banner);
print h3($banner);
print start_form(-method=>"POST");
# HTML form specific code
print end_form;
print end_html;
当我检查 Chrome 开发者工具上的 Elements 选项卡时,由于某种原因,整个 HTML 被包裹在一个 <pre> 标记中,而该标记又位于另一个 HTML 文档中。所以 HTML 格式不正确,但我无法理解为什么 -
<html>
<head></head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;"><!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Some text</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h3>Some text</h3><form method="post" action="/path/script.pl?param1=val1¶m2=val2" enctype="multipart/form-data">
//form specific code
</form>
</body>
</html></pre>
</body>
</html>
任何帮助将不胜感激。
【问题讨论】:
-
// other code ...中是否还有其他输出,或者print header("text/html")是脚本中遇到的第一个打印语句?可以从命令行运行脚本吗? -
“当我在 Chrome 的开发者工具中检查元素选项卡时,由于某种原因,整个 HTML 被包裹在
<pre>标记中,而该标记又被包含在另一个 HTML 文档中。” — 您正在检查 Chrome 生成的 HTML 文档,以显示它被告知是纯文本的内容。 -
Don't use the CGI module 和 尤其是不要使用它的html generating functions。
-
@mob 在
print header("text/html")之前有几个print redirect()语句在if语句内部,但除此之外,它是第一个print语句。在它之前有一个sprintf函数,用于格式化日期并将其存储在变量中。
标签: html apache perl cgi content-type