Почему мой Perl tr/// удаляет символы новой строки?

StackOverflow https://stackoverflow.com/questions/1652814

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение 4

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

Другие советы

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

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

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

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

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

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

Видеть Типы содержимого форм.

application/x-www-form-urlencoded:Разрывы строк представлены парами «CR LF» (т.е. %0D%0A).

...

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top