Xpoint
   [напомнить пароль]

корректная обработка символа \n из тега <textarea>

Метки: [без меток]
[удл]
2006-09-24 00:28:36 [обр] jack7[досье]

Существует html форма с полем textarea, в которое будет вводится текст

<textarea cols=95 rows=20 name="info_text" wrap="virtual"></textarea>

далее через POST текст передается на cgi сценарий, в виде пераметра $text, то есть с учетом модуля CGI, в скрипте это выглядит так

my $text = param('info_text');

далее мне необходимо внести эту переменную в базу MySQL, чтобы избавится от метасимволов(котроые могут быть внесены пользователем), использую escapeHTML, а затем с помощью функций объекта DBI добавляю данные в базу. Затем при необходимости, данные извлекаются из базы и выводятся на страницу в виде html

Проблема в том, что не получается корректно обработать символ перехода строки, то есть предположим в поле формы вводится следующий текст

print "hello!\n";

но в базу попадает он в виде

print "hello!
";

то есть \n воспринимается буквально как перевод строки, но если ввести в форму

print "hello!\\n";

то результат выходит

print "hello!\n";

происходит экранирование, как сделать его автоматическим, в cgi скрипте?

пробовал варианты

$text =~ /\n/\\n/g;
$text =~ /\\/\\\\/g;

но они не приводят к нужному результату ):

спустя 5 минут [обр] jack7[досье]

поправлюсь...

$text =~ s/\n/\\n/g;
$text =~ s/\\/\\\\/g;

замена конечно же, поторопился в первом посте

спустя 42 минуты [обр] Владимир Палант(387/4445)[досье]
Не надо извращаться, пользуйтесь $dbh->quote — это намного безопасней. Также обратите внимание, что DBI позволяет использовать placeholders, с помощью которых ескейпинг осуществляется автоматически, это даже более предпочтительный вариант.
спустя 4 часа 57 минут [обр] AB...(10/233)[досье]
Xpoint FAQ:Работа с переносами строки. или по вашему требованию
$text =~ s%\r?\n%\\n%g;
спустя 3 часа 18 минут [обр] jack7[досье]
спасибо за советы
буду пробовать..
спустя 3 часа 34 минуты [обр] jack7[досье]
Владимир, вы правы
placeholders решили проблему
спустя 4 дня [обр] Герман[досье]

Не люблю я лишних действий. А так онотоже вроде работает:
Так тоже работает.

$text =~ s/\x0D//g;

Попробуйте: может и у Вас заработает?

спустя 2 минуты [обр] Алексей Севрюков(198/1280)[досье]
Герман[досье] \x0D = \r, так что разницы никакой.
Powered by POEM™ Engine Copyright © 2002-2005