mysql_real_escape_string VS nl2br

Статус
В этой теме нельзя размещать новые ответы.

Flyer

Новичок
Здравствуйте.

Есть вопрос по работе этих двух функций совместно.
Пример кода:

PHP:
	$text	=	mysql_real_escape_string(" string \r\n string ");
	echo $text; // На выходе  string \r\n string 
	echo nl2br($text); // На выходе такая же строка  string \r\n string
НО без mysql_real_escape_string, nl2br срабатывает нормально и подменяет перевод строки на <br>. Не могу понять почему не срабатывает так же в моем примере. На выходе строки одинаковы без экранированных слешей (или это мне только так кажется). Пробовал nl2br(stripslashes($text)), на выходе все верно, убрал единственный слеш (string rn string) и разумеется не заменил на <br>.

Заранее спасибо!
 

AmdY

Пью пиво
Команда форума
Flyer
поменяй местами, сразу отформатируй, затем экранируй для запросов.
mysql_real_escape_string(nl2br($text));
кстати, ты в курсе что mysql_* уже deprecated, на новых версиях будет выдавать эту ошибку а позже и вовсе может исчезнуть. используй pdo или mysqli
 

Flyer

Новичок
Flyer
поменяй местами, сразу отформатируй, затем экранируй для запросов.
mysql_real_escape_string(nl2br($text));
кстати, ты в курсе что mysql_* уже deprecated, на новых версиях будет выдавать эту ошибку а позже и вовсе может исчезнуть. используй pdo или mysqli
К сожалению нужен именно такой порядок, так как ложу в базу вначале, не хотел грузить лишним кодом. Насчет это функции сейчас ее гляну, может с ней и проблема решится.


К сожалению много кода придется менять =). Должно же как то работать и на этой функции, задача тривиальна и что то в нее уперся ...
 

С.

Продвинутый новичок
echo $text; // На выходе string \r\n string
echo nl2br($text); // На выходе такая же строка string \r\n string
А где ты видишь в строке 'string \r\n string' переводы каретки? Там только буковки, пробелики и слешики. Вот и nl2br() тоже не видит.
 
  • Like
Реакции: AmdY

AmdY

Пью пиво
Команда форума
Flyer
правильные кавычки " или str_prelace('\r\n', "<br/>", $string) вместо nl2rb
 

Flyer

Новичок
Ну вот такая конструкция заработала. Но когда добавил получение данных от пользователя, то на выходе опять все по старому.

PHP:
	$text	=	mysql_real_escape_string($_GET["test"]);
	echo nl2br(stripcslashes($text));
        // на выходе: string \r\n string
 

Фанат

oncle terrible
Команда форума
ыыыыыыыыыыыыыыыыы :)
какая прелесть.

короче, Летун.
вернись в начало, вот к этой фразе:
К сожалению нужен именно такой порядок
подумай над ней хорошенько
а потом сделай так, как тебе сказали в самом начале.
 

Flyer

Новичок
Ну так если я сделаю так, то в базу буду ложить уже с HTML тэгами. Я же хочу что бы в нее попадало ровно то что подает пользователь минус опасная ерунда. И потом из нее вытаскивать эти данные форматировать и подавать пользователю...
 

Фанат

oncle terrible
Команда форума
во-первых, начнём с ужасного заблуждения про "минус опасная ерунда". Никакого минуса mysql_real_escape_string не делает и к опасной ерунде никакого отношения не имеет.
во-вторых, ты уж определись: если ты не хочешь лОжить в базу с тегами - то просто не добавляй их. Не используй nl2br() при добавлении в базу - и проблема решена.
 

Flyer

Новичок
Фанат, возможно я не верно изъяснился и меня не так поняли.
1. Получаю от клиента текст при помощи формы textarea
2. Прогоняю через mysql_real_escape_string
3. Кладу в результат в БД
4. Достаю его оттуда.
5. Показываю клиенту через nl2br.

Код выше, только без работы с БД, но на выходе \r\n в <br> не заменяет, пробовал регуляркой такая же беда, НО если убрать mysql_real_escape_string то все работает.
Собственно и ищу помощи по решению этой проблемы.
 

Фанат

oncle terrible
Команда форума
а зачем ты его запускаешь без бд?
Зачем ты создаёшь себе проблемы на пустом месте?
Сделай как собирался, с бд.
Если не будет работать - обращайся за помощью.
Если будет - проблемы нет, и помочь в ее решении не нужна.
 

Flyer

Новичок
Столько постов, а воз и ныне там...

С БД я и работаю, упразднил я лишние строки что бы не грузить Вас зря.
 

Фанат

oncle terrible
Команда форума
вот не надо упразднять лишние строки.

если из базы ты получаешь нормальную строку, то проблемы нет.
если получаешь с \r\n то значит прослешиваешь свои данные дважды.
ищи - где. проверь волшебные кавычки.
Всё.
 

Вурдалак

Продвинутый новичок
Flyer, зачем ты пытаешься ограничить себя переменной $text? Ты можешь:
  • Создать переменную $escText, в которой будет экранированная строка
  • Подставлять сразу значение mysql_real_escape_string($text), а не писать $text = mysql_real_escape_string($text)
 

Flyer

Новичок
Flyer, зачем ты пытаешься ограничить себя переменной $text? Ты можешь:
  • Создать переменную $escText, в которой будет экранированная строка
  • Подставлять сразу значение mysql_real_escape_string($text), а не писать $text = mysql_real_escape_string($text)
Да пусть их будет хоть сто ... проблема то у меня другая.
 

Вурдалак

Продвинутый новичок
Flyer, а, ну раз значение не в рамках одной сессии, то послушай Фанат'а.
 

Flyer

Новичок
вот не надо упразднять лишние строки.

если из базы ты получаешь нормальную строку, то проблемы нет.
если получаешь с \r\n то значит прослешиваешь свои данные дважды.
ищи - где. проверь волшебные кавычки.
Всё.
magic_quotes_gpc - отключены, проверял в самом скрипте.

В БД сохраняется строка такого вида: string \r\n string
 

Flyer

Новичок
Может косяк какой при получении данных, потому как:

PHP:
    $text    =    mysql_real_escape_string("string \r\n string");
    echo nl2br(stripcslashes($text));
        // на выходе: string <br> string


    $text    =    mysql_real_escape_string($_GET["test"]);
    echo nl2br(stripcslashes($text));
        // на выходе: string \r\n string

Те тут даже без БД, вот эти банальные пару строк уже косячат.
 

С.

Продвинутый новичок
Перевод каретки это вот такая херня ->
<- тынц, видишь мы уже на другой строке. Запомни: херня номер 1.

Символы -> \n <- это просто символы. Видишь никуда ничего не переходит, все осталосч в одной строке. Эта херня номер 2 обозначает место, где когда-то позже при определенных условиях будет вставлен настоящий перевод строки.

Функция nl2br() работает только с настоящим переводом строки (херня номер 1). Если ей подсунуть херню номер 2, то она на нее хер положит и ничего делать с ней не будет.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху