Правильный вывод текста на страницу

Insight707

Новичок
Дополню тему еще одним своим вопросом.



Это получается если скопировать текст и вставить его в форму.

Можно побороться с этим?

Вывожу через <pre>
 

С.

Продвинутый новичок
Это получается если скопировать текст и вставить его в форму.
Нет, это получается если одно слово слишком длинное.
Можно побороться с этим?
Можно. Насильно разделить на несколько слов, обрезать до разумных пределов, не принимать такое сообщение вообще.
 

Insight707

Новичок
Нет, это получается если одно слово слишком длинное.

Можно. Насильно разделить на несколько слов, обрезать до разумных пределов, не принимать такое сообщение вообще.
explode по пробелам и foreach проверять длину что ли?)

Не выводить через <pre>?
Не вариант.
 

Фанат

oncle terrible
Команда форума
"отформатированный" (какое бы значение автор ни вкладывал в это слово) несколько противоречит идее "разбить и поделить".
и с каких это пор вывод "через <pre>" имеет отношение к безопасности?

Я бы на твоём месте решал эти две задачи раздельно.
Но сначала неплохо было бы сформулировать задачу. В деталях, а не в виде дописки к чужому вопросу "у меня такой же"
 

Insight707

Новичок
Этот топик мой. Посмотрите первый пост :)

Как минимум, pre не дает пройти тегам. Хотя есть strip_tags, хе-хе.

Так есть другие варианты как правильно вывести текст из бд?
 

Фанат

oncle terrible
Команда форума
Этот топик мой.Посмотрите первый пост
посмотрел. ценю тонкий юмор.
Как минимум, pre не дает пройти тегам.
O, Ja-ja!
PHP:
blah-blah</pre><no><tags><ever>
как правильно вывести текст из бд?
вариантов немого особо. я предпочитаю
PHP:
<?=$data_from_db?>
 

Insight707

Новичок
Блин, а что с первым постом )

Правильно значит с переходами на новую строку и табуляциями.
 

Фанат

oncle terrible
Команда форума
Блин, а что с первым постом )
фраза
Дополню тему еще одним своим вопросом.
не выглядит, как начало новой темы.
с переходами на новую стркоу и табуляциями.
во-первых, к "выводу из бд" "переходы на новую строку" не имеют никакого отношения.
с точки зрения бд все данные одинаковы, и нет никакой разницы, как их выводить.
Если интересует какое-то определённое форматирование в получателе данных - так и надо писать, "вывод в HTML".

во-вторых, переводы строк в HTML делаются элементарно.
в-третьих, зачем сохранять табуляцию?
 

Insight707

Новичок
Я понял, просто, насколько я помню, я не создавал новую тему, а просто добавил пост в свою прошлую... Странно.

Переводы через ereg_replace что ли?
 

Фанат

oncle terrible
Команда форума
А, это значит я туплю.
В любом случае должен быть один вопрос - одна тема.

Короче, через <pre> - это самый тупой способ. Ответ в теме - это больше насмешка над нубом, чем нормальный совет.
для безопасности надо любые выводимые данные прогонять через htmlspecialchars(), кроме тех, которые специально отмечены, как безопасный HTML.
для форматирования обычно достаточно заменять переводы строк. ereg_replace для этого слишком жирно, есть str_replace или специальная функция nl2br()
если тебе нужно какое-то особенное форматирование, то роди уже наконец точное описание этого форматирования - откуда оно, зачем, и почему его надо сохранять, но при этом обрезать.
с примерами.
 

Insight707

Новичок
PHP:
<pre style='background-color: #ffffff; border-color: #CD5C5C;'>".htmlspecialchars($row['text'], ENT_QUOTES)."</pre>
Вот так я выводил.

Теперь сделал так:

PHP:
$text = htmlspecialchars($row['text'], ENT_QUOTES);
$text = nl2br($text);
<div class='box-content' style='background-color: #ffffff; border-color: #CD5C5C;'>$text</div>
Но проблема никуда не делась:



Значит все таки explode по пробелам и в foreach проверять длину каждого слова?
 

Фанат

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

Значит все таки explode по пробелам
Я не понимаю, о каких пробелах ты говоришь. Не вижу ни одного пробела в твоих примерах.

Если речь о вылезании "ффф" за пределы блока, я бы просто поставил overflow:hidden
если какая-то другая проблема, то пора бы уже её сформулировать.
 

Insight707

Новичок
PHP:
<div class='box-content' style='background-color: #ffffff; border-color: #CD5C5C; overflow:hidden;'>$text</div>
Все равно выходит за рамки.
 

Insight707

Новичок
Можно сделать

PHP:
$textarray = explode (" ",$text);

if (count($textarray) == 1) {

   echo "Выводим ошибку";
   return false;

}

foreach ($textarray as $ftext) {

   if (strlen($ftext) >= 50) {

     echo "Слово $ftext состоит из более чем 50 символов";
     return false;

   }

}
Или совсем костыль?
 

Insight707

Новичок
О госпади, не в тот div вставлял аттрибут.

Теперь отображает более менее нормально )
 
Сверху