【发布时间】:2021-11-16 04:19:09
【问题描述】:
我有一个 Perl 脚本,它建立一个数据库连接并以 HTML 格式显示输出。它试图显示的数据中嵌入了标签 (),因此不会显示 HTML。如果我打开脚本使用记事本生成的实际 HTML 文件,我会看到数据。但是由于标签,我无法显示它。知道如何解决这个问题吗?
#!/usr/bin/perl
use DBI;
use HTML::Escape 'escape_html';
unlink("D:\\Perl32\\scripts\\UndeliveredRAW.html");
my $host = '${Node.Caption}';
my $user = '${USER}';
my $pwd = '${PASSWORD}';
my $driver = "SQL Server";
$dbhslam = DBI->connect("dbi:ODBC:Driver=$driver;Server=$host;UID=$user;PWD=$pwd") || die "connect failed:";
$sthslam = $dbhslam->prepare("SELECT
DBA_Reports.dbo.undelivered_raw_host_msgs.ID
DBA_Reports.dbo.undelivered_raw_host_msgs.MESSAGE
FROM
DBA_Reports.dbo.undelivered_raw_host_msgs");
$sthslam->execute;
$msg = "Up";
$Count = 0;
$Output = "";
$Temp = "";
$tbl = "<TABLE border=1 bordercolor=orange cellspacing=0 cellpadding=1>";
$tblhd = "<TR><TH>ID</TH><TH>MESSAGE</TH></TR>";
while (my $ref = $sthslam->fetchrow_hashref()) {
$Count++;
$Output .= '<TR><TD align=center rowspan=1 valign=top width=1000 height=1000>'
. $ref->{'ID'}.'</TD>'
. '<TD align=center rowspan=1 valign=top width=1000 height=1000>'
. escape_html($ref->{'MESSAGE'}).'</TD></TR>';
}
$dbhslam->disconnect;
$Output = "$tbl$tblhd$Output</TABLE>";
my $filename1 = 'D:\\Perl32\\Scripts\\UndeliveredRAW.html';
open(my $fh1, '>', $filename1) or die "Could not open file '$filename1' $!";
print $fh1 "$Output";
close $fh1;
if ($Count > 0) {
$msg = $Output;
}
print "\nMessage: $msg";
print "\nStatistic: $Count";
期望的输出
【问题讨论】:
-
听起来你需要HTML::Escape 或HTML::Entities 之类的东西。
-
哦,在 perl 脚本中总是
use strict; use warnings;。 -
是需要安装的模块吗?当我尝试使用它时看到这个错误 PerlScript Error: Can't locate HTML/Escape.pm in @INC (@INC contains: D:/Perl32/site/lib D:/Perl32/lib .)
-
这是我添加的。使用 HTML::Escape qw/escape_html/; escape_html("")
-
添加到您的问题中的生成 HTML 示例可能很有用。我注意到一些不一致之处:1.变量
$host,$user,$pass,$driver将值保存在单引号中,没有发生插值,2.在循环中$Count++但从未使用过,3.$Output = "$Output$Temp";最好写$Output .= $Temp;,注意:有更好的方法可以在变量中形成 HTML 输出,从而提高可读性/简化代码维护。