Estás malinterpretando lo que muestra tu navegador. Recuerde que JSON es esencialmente texto sin formato, pero su navegador intenta mostrarlo como HTML. \n
Los caracteres en modo HTML NO se respetan y envolverán el texto en el primer carácter de espacio apropiado. JSON puede perfectamente mantener \n
caracteres dentro de sus cadenas sin ningún problema.
Lo más probable es que su <br>
el error proviene del <br>
inserción que estás haciendo en tu preg_replace
llamar, porque NO hay <br>
etiquetas en el JSON original. En otras palabras, está causando el mismo error que está tratando de corregir, al intentar corregir el error que no existiría si no intentara corregirlo.