Stai interpretando erroneamente ciò che sta visualizzando il tuo browser. Ricorda che JSON è essenzialmente un testo normale, ma il tuo browser sta cercando di visualizzarlo come HTML. \n
i caratteri NON vengono rispettati dai display in modalità HTML e avvolgeranno il testo nel primo carattere spazio appropriato. JSON può perfettamente conservare \n
caratteri all'interno delle sue stringhe senza alcun problema.
Molto probabilmente il tuo <br>
l'errore proviene da <br>
inserimento che stai facendo nel tuo preg_replace
chiama, perché NON ci sono <br>
tag nel JSON originale. In altre parole, stai causando proprio l'errore che stai cercando di correggere, cercando di correggere l'errore che non esisterebbe se non stessi cercando di risolverlo.