dedlfix: utf-8 codierung von DB zum browser fehlerhaft

Beitrag lesen

Hi!

<form action="$PHP_SELF" method="post" enctype="multipart/form-data" accept-charset="utf-8">

Achte darauf, dass $_SERVER['PHP_SELF'] durch Anhängen eines Querystrings mit allem möglichen gefüllt sein kann. Deshalb muss auch dieser Wert mit htmlspecialchars() behandelt werden. Oder aber, man nimmt action="", das steht ebenfalls für die aktuelle URL, ist einfacher zu notieren und nicht für Injections anfällig.

Die Eingabe via Formular in Richtung Datenbank funktionierte dann auch einwandfrei, nur das Auslesen hat mich wahnsinnig gemacht. Irgenwann fiel mir dann htmlentities() auf, was ich sonst häufiger für flat-Databases genutzt habe. Als ich es versuchsweise entfernt habe, hat endlich alles einwandfrei geklappt.

Du hast meine Vermutung nicht bestätigt/widerlegt. htmlentities() hat einen Parameter zum Angeben der Kodierung (der dritte namens charset) Wenn du den nicht auf #utf-8' stellst, aber UTF-8-kodierte Daten übergibst, dann wird jedes einzelne Byte von UTF-8-Byte-Sequenzen in eine NCR gewandelt. Das müsste auch sehr schön in der Quelltextansicht des Browsers zu sehen sein. Im Text sieht man dann beispielsweise zwei verkorkste Zeichen statt eines Umlauts.

Lo!