Невозможно удалить правую одинарную кавычку - PullRequest
2 голосов
/ 30 июля 2011

Попытка удалить правильную одинарную кавычку из данных, поступающих в форму Perl, безуспешна. Если я вставлю текст: (Can't 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";

Ответы [ 3 ]

1 голос
/ 30 июля 2011

Думаю, вам может понравиться Текст :: Деморонис .

0 голосов
/ 30 июля 2011

Я изменил строку замещения на:

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

Это мой результат из командной строки:

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

( Cant Be Dodged )
$ 

Та же строка, но с использованием экранированной left одинарные кавычки дали тот же результат, используя оригинальный код.

Редактировать

Я очистил вывод - теперь командная строка просто '$', ив конец вывода добавлена ​​новая строка, что облегчает просмотр соответствующего вывода.

0 голосов
/ 30 июля 2011

Итак, хитрость в том, чтобы выяснить, что это за персонаж.Одно из решений состоит в том, чтобы сделать что-то вроде этого:

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

Как только вы узнаете, что это за персонаж, удалить его просто.

...