2

一直试图从进入 Perl 表单的数据中删除右单引号,但未成功。如果我将文本: ( Can't Be Dodged ) 粘贴到表单中,它永远不会删除正确的单引号。我尝试了不同的编码和转义 Unicode 的方法,但似乎没有任何效果。

下面是我正在使用的。

#!/usr/bin/perl
use strict;
use CGI::Carp qw( fatalsToBrowser carpout);
use CGI '-utf8';
my $q = CGI->new;
my $buffer = $q->param( 'q' );
print "Content-Type: text/html; charset=UTF-8", "\n\n";
$buffer =~ s/[\'\`\.]//g;
$buffer =~ s/’//sg;
print "$buffer";
4

3 回答 3

1

我想你可能会喜欢Text::Demoronise

于 2011-07-30T12:44:52.207 回答
0

所以,诀窍是弄清楚角色是什么。一种解决方案是执行以下操作:

for my $c (split //, $buffer) {
    printf "[$c]: %x\n", ord $c;
}

一旦你知道角色是什么,删除它就很简单了。

于 2011-07-30T12:13:49.323 回答
0

我将替换行更改为:

$buffer =~ s/[\'\’\.]//g;

这是我从命令行得到的结果:

$ ./test.pl q="( Can’t Be Dodged )"
Content-Type: text/html; charset=UTF-8

( Cant Be Dodged )
$ 

相同的字符串但使用转义的单引号使用原始代码产生相同的结果。

编辑

我已经清理了输出——命令提示符现在只是“$”,并且在输出的末尾添加了一个换行符,这样可以更容易地查看相关输出。

于 2011-07-30T12:20:59.990 回答