2010-08-14 3 views
4

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

Я хочу сохранить разрывы строк и распечатать их позже. Я знаю, что могу сделать это с помощью функции 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 */ 
+0

невозможно. Попробуйте это в реальности и посмотрите. на выходе не будет \ r \ n. –

ответ

9

mysql_real_escape_string не удалить разрывы строк, то ускользает им.

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

+0

+1 Корректный Поттер –

-2

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

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

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

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

0

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))); 

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

Смежные вопросы