x_woman, yo tenía el mismito problema que tú y fue una pesadilla. Precisamente para metérselo a un elemento del DOM por innerHTML, no sé si tú lo quieras para lo mismo.
Terminé encontrando que el error es que
nl2br() te convierte los saltos de línea, es decir, los caracteres "\n" en "<br/>", pero eso funcionan bien sólo en Linux !
En realidad, Windows no inserta "\n" como salto de línea, sino que inserta "\r\n" (o sea dos caracteres) y claro que cuando tú pasas tu cadena por un
nl2br() nada más se sustituye el "\n" por el "<br/>", pero se queda el caracter de retorno de carro y provoca un salto de línea no deseado.
Lo resolví desde PHP, antes de imprimir mi código Javascript, con una función similar a
nl2br() que funciona tanto en Windows como en Linux:
Código PHP:
//
$contenido = ereg_replace("(:?\r)\n","<br/>",$contenido_viejo);
Saludos