Źle interpretujesz, co wyświetla Twoja przeglądarka. Pamiętaj, że JSON to w zasadzie zwykły tekst, ale Twoja przeglądarka próbuje wyświetlić go jako HTML. \n
znaki NIE są honorowane przez wyświetlacze w trybie HTML i zawijają tekst na pierwszym odpowiednim znaku spacji. JSON może doskonale przechowywać \n
znaki wewnątrz swoich ciągów bez żadnych problemów.
Najprawdopodobniej Twój <br>
błąd pochodzi z <br>
wstawianie, które robisz w swoim preg_replace
zadzwoń, ponieważ NIE MA <br>
tagi w oryginalnym formacie JSON. Innymi słowy, powodujesz ten sam błąd, który próbujesz naprawić, próbując naprawić błąd, który nie istniałby, gdybyś nie próbował go naprawić.