Tach!
Da PHP Zeichen als solche nicht kennt, hat htmlspecialchars() unter anderem einen Parameter, der die Zeichenkodierung bestimmt. Vielleicht probierst du damit mal ein wenig.
Mir ist zwar im Moment schleierhaft, warum das überhaupt notwendig wäre, htmlspecialchars() ist nicht htmlentities() und soll nur fünf einfache Zeichen im untersten Bereich umwandeln, aber vielleicht hilft's ja.
Nein, das hilft garantiert nicht, denn htmlspecialchars() ist nicht htmlentities(), wie du schon erkannt hast. Die NCRs stammen auf keinen Fall von htmlspecialchars().
Und noch ein Argument, das gegen die htmlspecialchars()-Theorie spricht: Selbst wenn der OP fälschlicherweise htmlspecialchars() genannt hat und stattdessen im eigentlichen Programm htmlentities() verwendet hat, kann das beschriebene Fehlerbild nicht auftreten. Beide Funktionen erzeugen keine NCRs, mit Ausnahme des NCRs für den Apostroph.
htmlspecialchars() schreibt also keines der gezeigten Zeichen um, htmlentities() lediglich das ç, was aber zu ç wird. Der Rest der Zeichen wird ignoriert, weil es dafür keine Entitys gibt. (Diese Aussage ist gültig für PHP-Versionen kleiner als 5.4. Ab 5.4 kann man sich HTML5 wünschen, was ein paar Zeichen mehr berücksichtigt, aber immer noch keine NCRs erzeugt.)
dedlfix.