Mir ist sowieso nicht ganz klar, wieso Umlaute etc. hier in ihre Entitydarstellung umgewandelt werden. Das ist völlig unnötig, da sie Seite ja korrekt einen Charset an den Browser sendet.
Und da es sich dabei um UTF-8 handelt, sind alle Zeichen direkt darstellbar und es bedarf keiner Entities.
Also, das Ersetzen von äöü durch ö etc. abschaffen, und drauf achten dass man beim Arbeiten mit Strings die entsprechenden mb_* Funktionen nutzt, und das Charset für mb_* auch auf UTF-8 stellt. Erspart krampfigen Umgang mit sowas.