Non capisco come può uno script del genere essere tanto schizzinoso in ogni caso.
Codifica l'a capo in una serie di caratteri che conosci tu io t faccio un esempio:
ogni a capo per noi sarà: ~~n~~.
fai una str_replace sostituendo ad ogni \n la sequenza ~~n~~ (usa caratteri che non ci sono nella tastiera possibilmente eviterai casini se qualche simpaticone te li inserisce, x questo in questi casi uso sempre le tilde).
A questo punto per ogni a capo avrai una nuova sequenza. Se vuoi stampare a video ti basta sostituire questa sequenza con un
di html. Ti consiglio d fare questa sostituizione non nel database ma appena prendi la stringa dalla query, perché per ogni a capo metti 5 caratteri e se hai stringhe lunghe potresti incrementare di tanto la dimensione del record (ricordati che ogni carattere è codificato con un byte). Se lasci la stringa con gli /n e la sistemi con le sequenze nuove una volta tirata fuori dal db per passarla allo script per te è perfetto!