Почему мой Perl tr /// удаляет переводы строки? - PullRequest
0 голосов
/ 31 октября 2009

Я пытаюсь очистить ввод формы, используя следующую транслитерацию Perl:

sub ValidateInput {
 my $input = shift;
 $input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\\{}[]?! -//cd;
 return $input;
}

Проблема в том, что эта транслитерация удаляет встроенные символы новой строки, которые пользователи могут вводить в поле текстовой области, которое я хочу сохранить как часть строки. Любые идеи о том, как я могу обновить это, чтобы предотвратить удаление встроенных символов новой строки? Заранее спасибо за помощь!

Ответы [ 4 ]

3 голосов
/ 01 ноября 2009

Я не уверен, что вы делаете, но я подозреваю, что вы пытаетесь сохранить все символы между пробелом и тильдой в таблице ASCII, а также некоторые пробельные символы. Я думаю, что большая часть вашего списка сводится к одному диапазону \x20-\x7e:

$string =~ tr/\x0a\x0d\x20-\x7e//cd;

Если вы хотите выбить такой символ, как " (хотя я подозреваю, что вы действительно этого хотите, поскольку вы разрешаете одинарную кавычку), просто измените свой диапазон:

$string =~ tr/\x0a\x0d\x20-\xa7\xa9-\x7e//cd;
1 голос
/ 31 октября 2009

См. Типы содержимого формы .

application/x-www-form-urlencoded: разрывы строк представляются в виде пар "CR LF" (т. Е. %0D%0A).

...

multipart/form-data: Как и во всех передачах MIME, «CR LF» (т. Е. %0D%0A) используется для разделения строк данных.

Я не знаю, что у вас в базе данных. Теперь вы знаете, что видит ваш сценарий.

Вы используете CGI.pm, верно?

1 голос
/ 31 октября 2009

Это немного византийский способ сделать это! Если вы добавите \ 012, то должны остаться новые строки.

$input =~ tr/a-zA-Z0-9_@.:;',#$%&()\/\{}[]?! \012-//cd;
0 голосов
/ 31 октября 2009

Спасибо за помощь, ребята! В конечном итоге я решил обработать все данные в нашей базе данных, чтобы удалить символ, который вызывал проблему, чтобы любой текст, который был отправлен через нашу форму обновления (а не изменен пользователем), соответствовал тому, что было в базе данных. В соответствии с вашими предложениями я также добавил несколько дополнительных разрешенных символов в регулярное выражение проверки.

...