У меня есть контент, хранящийся в mysql, как показано ниже:
first line second line third line
но когда я использую функцию эхо-сигнала, она показывает вывод, подобный этому
first line second line third line
однако я хочу показать вывод точно так же, как его сохранено в mysql.
echo nl2br ($ str_from_db);
Вы выводите его точно так же, как MySQL хранит его. Браузер установлен для отображения его иначе, чем вы его выведете, потому что вы выводите текстовый контент на HTML-страницу. (В частности, он не отображает новую строку для каждой новой строки, которую вы выводите).
Чтобы правильно отобразить его в HTML, вам нужно заменить символы новой строки символом nl2br
строки, nl2br
– полезная функция для этой точной цели.
Другие способы заставить браузер отображать его так, как вы намереваетесь, – это установить тип содержимого как text/plain
вместо text/html
или использовать <pre>
.
В этом конкретном случае вы можете заменить \n
на строку с помощью тегов.
Из руководства PHP на str_replace :
$str = "Line 1\nLine 2\rLine 3\r\nLine 4\n"; // THIS IS YOUR DB VALUE! $order = array("\r\n", "\n", "\r"); $replace = '<br />'; // Processes \r\n's first so they aren't converted twice. $newstr = str_replace($order, $replace, $str);
Вы просматриваете его так, потому что \n
(новые строки) не имеют нового линейного эффекта для HTML. Они просто показывают один рядом друг с другом. Чтобы заставить разрыв строки вам нужно использовать тег <br/>
или таблицу или неупорядоченную строку …
Вы можете обернуть содержимое в тегах <pre></pre>
или <code></code>
или указать свойства CSS для элемента, который используется для отображения содержимого из MySQL.
Например:
CSS:
.mysql-content { white-space: pre; }
HTML:
<div class='mysql-content'>first line second line third line</div>
Должен отображаться так, как вы хотите.