Хорошо, объясню так сказать с примерами. Вот так я ввожу текст с тегами в БД, вроде ничего необычного, экстраординарного и странного:
При выводе текст из БД на страницу с применением функции PHP nl2br получается такая хурма.
С остальными постоянно применяемыми тегами функция работает хорошо, без подобного выпендрежа.
Мануалы все прочитаны и не раз уже. Много найдено чего в инете, и ничего не помогло. И с preg_replace() в разных вариациях я уже развлекался, результат тот же.
P.S. Есть вариант сделать вот так:
$text = preg_replace(array("/\\r\\n/", "/\\r/", "/\\n/"), "<br />", $text);
$text = str_replace("<br /><li>", "<li>", $text);
$text = str_replace("<ul><br />", "<ul>", $text);
$text = str_replace("</li><br />", "</li>", $text);
$text = str_replace("</ul><br />", "</ul>", $text);
Но это уже какие-то некрасивые убогие костыли.