Сохранить текстовую область в MySQL и сохранить разрывы строк - PullRequest
4 голосов
/ 14 августа 2010

Представьте себе систему блогов или cms (PHP и MySQL). Я хочу позволить пользователю ввести некоторый текст в текстовое поле и сохранить его в базе данных. Тип поля в базе данных - TEXT.

Я хочу сохранить разрывы строк и распечатать их позже. Я знаю, что могу сделать это с помощью функции PHP nl2br, но как мне защитить эту строку от SQL-инъекций (предположим, я не могу использовать подготовленные операторы) Если я использую mysql_real_escape_string, он больше не показывает разрывы строк.

$text = 'one line
another line';
$text = mysql_real_escape_string($text);
/* save to db, fetch it some time later */
echo nl2br($text); /* output: one line\r\nanotherline */

Ответы [ 3 ]

9 голосов
/ 14 августа 2010

mysql_real_escape_string не удаляет разрывы строк, оно экранирует их.

Это должно работать нормально, чтобы убрать строку при ее сохранении и применении nl2br (возможно в сочетании с htmlspecialchars(), чтобы запретить пользователям вводить необработанный HTML), когда данные вывод .Это лучший путь.

1 голос
/ 28 января 2015

mysqli_real_escape_string заменит возврат каретки на \r\n, поэтому вам нужно будет вернуть его, используя str_replace(). Тем не менее, он все еще не будет виден в вашем браузере / почтовом клиенте. Вот где nl2br() вступает в игру:

$text = 'one line
another line';
echo nl2br(str_replace("\\r\\n","
", mysqli_real_escape_string($dbc, $text )));

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

0 голосов
/ 14 августа 2010

Если я использую mysql_real_escape_string, он больше не показывает разрывы строк.

разве вы не видите "\n" литералов вместо разрывов строк?
ifИтак, ваш код делает какие-то неприятные вещи, скорее всего вы дважды экранируете свои данные.
или вы не выполняете mysql_real_escape_string () после получения данных из базы данных?

В любом случае, вам нужно провести некоторую отладку - расследование, чтобы увидеть, что происходит с вашими данными на на каждом этапе .Просто распечатайте $ _POST ['textarea_name'], SQL-запрос и т. Д.
Чтобы увидеть момент, когда вы потеряли свои перерывы, и узнать обидчика

Примечания:
mysql_real_escape_string ничего не защищает отлюбая атака.Он избегает разделителей.
nl2br ничего не сохраняет.Добавляет HTML-тег к разрывам строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...