Но как выполнять функцию htmlspecialchars(), если данные уже содержат тегиПочему у Вас данные в БД содержат теги?!
$lines=preg_split("/(\r\n|\n|\r)/",$text);
Другими словами Чем отличается \n который создается при клике enter в поле ввода, от \n, который я пишуТем, что \n по Enter - это один СПЕЦИАЛЬНЫЙ символ с кодом 0x0a, а то что Вы пишите - уже два ПЕЧАТНЫХ символа "\" и "n". Тут таблица.