【问题标题】:How to remove the ASCII code 28 0x1C (FS) from a Perl CGI script?如何从 Perl CGI 脚本中删除 ASCII 码 28 0x1C (FS)?
【发布时间】:2015-05-22 10:14:00
【问题描述】:

我有以下代码sn-p

@trunkarray = split(/:/,$trunkid);
my $compString = "";

foreach $value ( @trunkarray ) {
    print "<TR> <TD> $value </TD> </TR>";

    if ( ! ($compString) ) {
        $compString = "$value";
    }
    else {
        $compString = $compString . ",$value";
    }
}   

&updateOperation($compString);

$CompString 变量被发送到updateOperation

我的脚本在上述语句中的逗号,$value 之后给出了一个特殊字符FS(代码点28 或0x1C)。我在 Notepad++ 中粘贴输出时发现了这个特殊字符。

谁能告诉我为什么我得到这个特殊字符,如果有办法删除它?

由于这个特殊字符,我的数据库操作(在 updateOperation 子例程下)被中止;由于此字符串作为更新操作的参数传递,如下所示:

sub updateOperation
{
    my($trunkgrplist) = @_;
    $UPDATE= "update TRUNKGROUP set source='D' where trunkgrpid in ($trunkgrplist)";
..
}

【问题讨论】:

  • 推测FS ("\x1C") 字符已经存在于$trunkid 变量中。该值的来源是什么?
  • 请添加以下use Data::Dumper;$Data::Dumper::Useqq = 1;print Dumper \@trunkarray;并显示结果
  • trunkid 的来源来自表单,被选中的复选框是trunkid 的结果,由':'(冒号)分隔。
  • 简单的答案是tr/\x1C//d,但这是解决代码中单独错误的一种技巧。您应该修复错误而不是删除其影响。如果$trunkid 的值是单个数据库列的内容,那么很可能是写入数据库的代码有问题,但您应该显示检索的 SQL 语句,以便我们确定
  • @PatrickJ.S.:那就是split /:\x1C?/, $trunkid

标签: perl character ascii


【解决方案1】:

无论出于何种原因,你都有相当于

my $compString = "428331:\x{1C}428332:\x{1C}428333";

你可以修复它

$compString =~ s/\x1C//g;

$compString =~ tr/\x1C//d;

你的代码变成了

sub updateOperation {                                  # XXX Bad name
   my @trunk_grp_ids = @_;

   while (@trunk_grp_ids) {
      my $trunk_grp_ids_list =
         join ', ',
            map $dbh->quote($_),
               splice(@trunk_grp_ids, 0, 500);

      $dbh->do("
         UPDATE TRUNKGROUP
            SET source='D'
          WHERE trunkgrpid in ( $trunk_grp_ids_list )
      ");
   }
}   

my $compString = "428331:\x{1C}428332:\x{1C}428333";   # XXX Bad name
$compString =~ tr/\x1C//d;
my @trunk_grp_ids = split /:/, $compString;
updateOperation(@trunk_grp_ids);

【讨论】:

  • 哎呀!我到处都写了FC,而不是1C。固定。
  • 谢谢大家。这有帮助。 :)
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多