440Hz Спасибо, Сделал так $text = nl2br($text); Когда вытаскиваю из базы для редактирования, то в поле текст выводится так: text - <br />description Как сделать чтобы выводилось так: text - description
$TextFromDb = str_replace( '<br />', '', $TextFromDb); При сохранении тогда опять надо будет вызывать nl2br(). Следовательно нынешняя реализация неэффективна. Верное решение: Вызывать nl2br() только при выводе информации, в необходимых местах.
Неверное решение. Тоже неверно. При сохранении: nl2br() При редактировании: $text = str_replace("<br />", "\r\n", $text);
хранить данные, пришедшие от пользователя нужно в том виде, в котором они пришли. (с) сохраняем с EOL, при выводе пропускаем через nl2br
EOL = End Of Line Обозначение символов конца строки, например, в Mac это \r (подсказал AlexeyGousev), в Windows — \n, в Linux же \r\n
кроме этой функции еще будет обрабатыватся на запрещенные теги, наличие бб-кода и т.п. некоторые сохраняют в базе две версии - оригинал и обработанную. А если я захочу взять этот текст и использовать его не в html? Или заменить переводы строки не на "<br />" а на "</p><p>"?
Я сторонник хранения обработанной версии. Лучше я переведу при редактировании HTML назад в BB, чем буду постоянно при выводе парсить. Хранить два варианта довольно накладно, когда в базе и без этого хватает контента.
Извольте читать мануал Символы новой строки будут всегда при изменении сохранений удваиваться. Понимаю, что воскресенье, похмель...
Не вижу ничего личного в моём сглаживании Вашей ошибочки. Но могу больше подобного и не писать, если Вас это так затрагивает...
на самом деле правильно что-то обрабытвать до, а что-то после =) ну а в особо хайлоадных случиях, либо хранить 2 варинта(это накладно если объём БД 10 Гигов) либо обрабатывать всё до
Но есть ещё и вариант кеширования . Пожалуй - самый верный вариант на мой взгляд, так как: 1) данные не занимают лишней памяти в базе( хранятся в единственном экземпляре). 2) Текст(данные) всегда чист, и готов к работе. Его не надо обрабатывать никакими функциями.