html - 即使在显式配置 Content-Type 之后,Perl CGI 脚本也会输出原始 HTML
问题描述
我在让我的 Perl CGI 脚本呈现 HTML 时遇到了很多麻烦。它一直将 HTML 输出为纯文本。我什至尝试使用显式设置Content-Typeprint 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 的开发者工具上检查元素选项卡时,由于某种原因,整个 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>
任何帮助将不胜感激。
解决方案
当我运行你的程序时,我得到以下输出:
Content-Type: text/html; charset=ISO-8859-1
<!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="http://localhost" enctype="multipart/form-data"></form>
</body>
</html>
这正是我期望看到的,与您所看到的完全不同。我可以看到两种可能性来解释这种差异:
# other code
在您的程序部分中有一些东西正在输出一组 CGI 标头(也许还有<pre>
标签)。- 您实际上并没有在 CGI 环境中运行代码,并且有一些不寻常的 Web 配置会从您的程序中获取输出并将其嵌入到另一个网页中。
区分这两种情况的一种简单方法是从命令行运行程序并查看得到的输出。如果你得到你的输出,那么问题出在某个地方# other code
,如果你得到我的输出,那么问题出在 Web 服务器配置中。
顺便说一句,我强烈建议您阅读最新版本的CGI 模块文档和CGI::Alternatives页面中标题为HTML 生成函数的部分,以查看有关更好方法的一些建议。
推荐阅读
- javascript - 如何找到数组中每个对象的平均值
- python - 如何为带有输入的代码编写单元测试(Python)
- android - 在 Android Instrumentation 测试中启动 Fragment 时的几个问题
- node.js - res.render 如果我不使用它,使用 populate() 渲染失败,它可以工作
- javascript - 将展平对象转换为分层对象
- excel - powerquery 按行分组,在多列上使用公式
- java - 为什么我们需要双向同步方法?
- reactjs - Material UI TableCell onclick不起作用
- python - 这个 python 代码是使用 BFS 还是任何其他搜索算法?
- javascript - 跨域 Cookie 在 Safari 上不起作用