Я предполагаю, что вы имеете дело только с набором простого текста, введенного в текстовую область, а не с каким-то необычным редактором HTML, как предполагал другой автор.
Причина, по которой ваши разрывы строк теряются, заключается в том, что HTML не рассматривает разрывы строк как разрывы строк. Разрывы строк рассматриваются как просто еще один пробел. Только <br>
рассматривается как разрыв строки. (Или <br />
в XHTML) Если это то, что происходит, вы можете использовать функцию nl2br()
для преобразования всех разрывов строк в <br>
.
Несколько пробелов сложнее. HTML не различает один пробел и много пробелов. Пробелы, табуляции, разрывы строк или любая их комбинация, это не имеет значения, все это рассматривается как один пробел. Один из способов предотвратить это - обернуть все это в блок <pre>
или <code>
. Но это ужасно, если вы не пытаетесь отобразить компьютерный код.
Или, если вы действительно отчаянно нуждаетесь в этих дополнительных пробелах, вы можете заменить все пробелы на
, что заставляет веб-браузеры отображать лишние пробелы. (См. Правку ниже.)
Редактировать: Окончательная версия, которая сохраняет разрывы строк и несколько пробелов, а также предотвращает XSS:
<?php echo nl2br(str_replace(' ', ' ', htmlspecialchars($text))); ?>