如何从Perl CGI脚本中删除ASCII码28 0x1C (FS)



我有以下代码片段

@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)";
..
}

不管什么原因,你有一个等效的

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);

最新更新