You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl CGI脚本循环打印文件内容时特定行输出异常求助

问题原因及解决方案

核心问题

浏览器把文件里的<BBBBBBBB44444444>当成了HTML标签(因为以<开头),但这不是有效的HTML元素,所以浏览器直接忽略了从<到>之间的内容,导致该行只显示in[ 41: ]。另外原代码没处理HTML转义,也没保留文本格式,导致空格、换行显示异常。

修复步骤

  1. 转义HTML特殊字符:用HTML::Entities模块把<、>这类字符转成HTML实体(比如&lt;、&gt;),避免被浏览器当作标签解析。
  2. 保留文本格式:把输出内容包在<pre>标签里,让浏览器保留原始的空格、换行格式。
  3. 优化文件读取:直接用Perl内置的open函数读文件,替代调用cat命令的低效写法。

修正后的代码

use CGI;
use HTML::Entities;

my $q = CGI->new;
for ($q->param('menu')) {
    /^(1)$/ and do {
        # 直接打开文件读取内容
        open my $fh, '<', '/tmp/int_rej_sample.txt' or die "无法打开文件: $!";
        my @Sample = <$fh>;
        close $fh;

        # 输出正确的HTTP头部和pre标签
        print $q->header('text/html');
        print "<pre>";
        foreach (@Sample) {
            # 转义HTML实体后打印
            print encode_entities($_);
        }
        print "</pre>";
    };
}

说明

  • encode_entities函数会自动转义所有HTML特殊字符,确保文件内容原样显示。
  • <pre>标签强制浏览器按原始文本格式渲染,保留换行和空格。
  • 用CGI模块的header方法输出正确的HTTP头部,避免浏览器解析错误。

内容的提问来源于stack exchange,提问作者Bassem Abd Elmaksoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:31:34