2

Perlフォームに入るデータから正しい一重引用符を削除しようとして失敗しました。テキスト:(回避できません)をフォームに貼り付けると、右の一重引用符が削除されることはありません。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

だから、トリックはキャラクターが何であるかを理解することです。1つの解決策は、次のようなことを行うことです。

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 に答える