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

Insight707

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

i1044538


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

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

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

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

explode по пробелам и foreach проверять длину что ли?)

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

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

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

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

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

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

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

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

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

Но проблема никуда не делась:

dfa3c6bfd4b3f71570d30a7f36b892d5.png


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

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

Если речь о вылезании "ффф" за пределы блока, я бы просто поставил overflow:hidden
если какая-то другая проблема, то пора бы уже её сформулировать.
 
PHP:
<div class='box-content' style='background-color: #ffffff; border-color: #CD5C5C; overflow:hidden;'>$text</div>

Все равно выходит за рамки.
 
Можно сделать

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

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

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

}

foreach ($textarray as $ftext) {

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

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

   }

}

Или совсем костыль?
 
О госпади, не в тот div вставлял аттрибут.

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