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().
Der Zeichenkodierungsparameter hat bei htmlspecialchars() für ISO-8859-x und UTF-8 keinerlei Auswirkung. Die behandelten Zeichen liegen alle im ASCII-Teil, dessen Byte-Werte 00..7F auch nur für diesem verwendet werden. Kombinationen aus mehreren Bytes werden bei UTF-8 mit Werten oberhalb von 7F gebildet. Einige (asiatische) Kodierungen verwenden Werte aus dem Bereich 00..7F in Kombination mit anderen Werten für Nicht-ASCII-Zeichen. Die Kenntnis der Kodierung spielt nur bei diesen Kodierungen eine Rolle, um solche Kombinationen korrekt erkennen zu können.
Davon ganz unabhängig solltest du Texte meiner Meinung nach besser erst dann mit htmlspecialchars() sichern, wenn es wirklich nötig ist - nämlich direkt bei der Ausgabe. Der Datenbank tut HTML nicht weh
Oh doch. Zum einen verbrauchen die NCRs (oder andere Ersatzschreibweisen üblicherweise) mehr Zeichen als das originale korrekt kodierte. Dabei kann beim Speichern in Feldern mit begrenzter Zeichenanzahl ein Verlust auftreten. Noch dazu meldet MySQL diesen Verlust nur mit einer Warnung, die aber kaum jemand auswertet. Zum anderen lässt sich mit einer Ersatzschreibweise keine gescheite Stringverarbeitung (inklusive Sortierung) mehr betreiben. Hühner werden beispielsweise vor Hasen einsortiert, weil &...; kleiner als a ist.
Dein Kodierungsproblem wegen des merkwürdigen htmlspecialchars()-Verhaltens täte sich obendrein in Wohlgefallen auflösen.
Nö, sicher nicht. Die Zeichenkodierungsproblematik löst sich nicht in Wohlgefallen auf, indem man sie komplett ignoriert. Er wird nicht drum herumkommen, die Beziehungen zwischen allen beteiligten Systemem diesbezüglich zu beleuchten.
dedlfix.