Есть база, в одном из полей хранится текст, пара абзацев, с кавычками, слешами, переводами строк и т.п. Мне надо этот текст выводить на экран так, как он есть. Обычное echo $text выдаёт всё в подбор, без переносов строк. Использование <pre> во первых, растягивает страничку даже не смотря на то, что размер блока, в котором выводится, жестко указан. И во вторых, меняет шрифт. При просмотре кода странички этот текст показан с переносами. Сохранение кавычек и тегов вроде сделала, а перенос строк - не могу сообразить Использование формы <textarea> тоже как-то кажется не совсем правильным решением. Хотя так оно отображается, как надо
При сохранении текста в базу обрабатывайте не только кавычки, но и \r\n. И при выбросе из базы так и отдавайте. Браузеры прекрасно понимают \r\n, переданный в виде текста вместе с контентом.
Можно попробовать перед выводом заменять переносы строк на <br /> Код (Text): $text = preg_replace( "#\r?\n#", "<br />", $text ); echo $text;
Завязывайте вы регулярками заменять символы, когда нет сложных условий замены. Такие вещи делаются обычным str_replace. И да, менять \r\n на br не нужно. \r\n есть \r\n.
str_replace(array("\r\n","\r",'йадЪ','перевод_строки_ололо'),'<br>'); сделает то же самое, но быстрее и дешевле, другое дело, что замена на выводе просто-напросто не нужна в данном случае и лишь сотрясает воздух, то бишь впустую ест такты процессора.
откройте для себя nl2br() и устыдитесь ))) а вообще не надо этого, а надо делать htmlspecialchars(), затем выводить всё в <pre> </pre> чтобы переводы строк, пробелы и все дела работали
<pre> я первым делом пробовала. После него браузер в ширину раздаётся на десять экранов И регулярками не пользуюсь, так как тупо не понимаю их. Str_replace пока хватает. Я бы и его использовала для переноса строк, но какой символ менять на перенос - понять не могу. Ну нету там \r\n. Обычный текст. И ведь оно же при просмотре кода с переносами показывается Устыдилась Вставила в код и обрадовалась В поисковиках одно экранирование было, а про эту возможность ну совсем никак не попадалось. Спасибо! Проблема решена!
Разумеется таких буковок там нету. Это обозначения новой строки и перевода каретки. А вот они - есть.
nl2br не заменяет переводы строк, а добавляет перед ними <br /> Код (Text): nl2br( "text \r\n text \n text" ) >>> "text <br />\r\n text <br />\n text" Я считаю, что одна строка не может быть велосипедом. И привык держать происходящее под контролем. А если мне нужно заменить на <br> (без слеша)? И если я выбрал PHP, то производительность меня не волновала в принципе)
Скажешь потом это своему хостеру и пользователям, когда сервак будет падать от 100 посещений. Если php работает не со скоростью C++, это не значит, что можно на расходы ресурсов смело болт забивать. И да, черт возьми, неужели никто не слышит, что не нужно заменять символ переноса br-ами? Браузеры давно понимают символ переноса нативно.
Да ладно Вам от одной маленькой (и беззащитной) регулярочки ничего не упадёт, а решение красивое, гибкое и главное - оно объясняет, что нужно делать. А вариант реализации пусть выбирает сам разработчик. Добавлено спустя 33 минуты 17 секунд: А можно подробнее? Вот в примере 4 браузера не понимают разрыв. IE9, остальные все новые. http://take.ms/RiMMh Точнее они считают разрыв как пробел. Что не так в примере?
1) Я имел ввиду мальца не это; 2) Вскрыл свой модуль, где есть такой вывод, да, у меня там просто правильно отcss-енный <pre>. Окай. Давно туда не лазил и начал воспринемать его поведение как должное. 3) Регулярка не нужна. Даже в документации написано, что юзать регулярки для таких задач - моветон.
А с этого места поподробней. У меня в стилях #main_field { width: 600px; } В HTML <div id="main_field"> <pre> <? echo $text; ?> </pre> </div> И это - разносит браузер. Далее, в HTML оформляю дополнительно таблицу (идёт вывод данных в таблицу) <div id="main_field"> <TABLE width=90%> <tr><td> <pre> <? echo $text; ?> </pre> </td></tr> </TABLE> </div> И всё равно - разносит на несколько экранов. Если бы понимали, вопрос не появился бы, не? И делать код, который будет работать ТОЛЬКО в последних версиях браузера - ИМХО неумно.