Vollständige Sonderzeichen-Kontrolle bei Eintrag in DB

27apricot

Erfahrenes Mitglied
Hallo,

ich finde irgendwie keinen Weg in eine vollständige Kontrolle darüber, was ein PHP-Script, das Daten in eine MySQL-DB schreibt, mit Sonderzeichen anstellt.

Meine Erfahrungen bisher sind, dass offensichtlich sowohl Browser als auch Server darauf Einfluss haben. Bei einem meiner Projekte habe ich uncodierte Sonderzeichen eingegeben, die es dann als HTML-Entities in die Datenbank geschrieben hat. Bei einem anderen Benutzer hat es die gleichen Zeichen nicht übersetzt. In einem anderen Projekt ist es genau anders herum. Hier werden bei einem anderen Benutzer auch z.B. die französischen Anführungszeichen -- »« -- codiert in ihrem ASCII-Code eingetragen. Wenn ich diese eingebe, passiert keine Umwandlung. Der Zeichensatz, den ich in der Index-Datei definiert habe, ist ISO-8859-1, der diese Anführungszeichen enthält.

Bei einem weiteren Projekt habe ich jetzt versucht, im verarbeitenden Script mit htmlentities() zu arbeiten. Wenn ich das tue, schreibt es einen Gedankenstrich als – in die DB. Es wurde also, bevor die Funktion greift, schon der Gedankenstrich codiert, so dass die Funktion ein Ampersand übergeben bekommt, den sie selbstverständlich nochmals umwandelt.

Außerdem: wenn ich als Zeichensatz in der Index-Datei UTF-8 definiere, dass ja wohl alle gebräuchlichen Zeichen enthält, werden die deutschen Umlaute, die uncodiert in der HTML-Datei stehen, nicht mehr angezeigt.

Ich bin ratlos. Vielleicht kann mir ja jemand helfen.

Danke und schöne Grüße:
27apricot.
 
Zuletzt bearbeitet:
Arbeite am besten in allen Systemen mit der Unicode-Kodierung UTF-8. Denn wie bereits erwähnt, umfasst Unicode „jedes sinntragende Zeichen bzw. Textelement aller bekannten Schriftkulturen und Zeichensysteme“ (Wikipedia) und die Darstellung von Zeichen durch Zeichenreferenzen ist nicht nötig.

Beim Arbeiten mit UTF-8 reicht es jedoch nicht aus, nur die Ausgabe als UTF-8-kodiert zu klassifizieren. Denn die Ausgabe muss auch tatsächlich UTF-8-kodiert sein. Sonst kommt es nämlich dazu, dass Zeichen falsch dargestellt werden, da die Kodierungsdeklaration und die tatsächliche Kodierung nicht übereinstimmen. Jeder ordentliche Editor kann aber heutzutage mit UTF-8-Kodierung speichern.

Wenn mit UTF-8 gearbeitet wird, sollte aber auch Formularen dies explizit mitgeteilt werden (siehe accept-charset-Attribut), damit die vom Browser geschickten Benutzereingaben gleich richtig kodiert ankommen.
 
Hallo Gumbo,

danke für die Antwort. Ich muss also meinem Editor sagen, er soll die PHP/HTML-Dateien in UTF-8-Codierung speichern, versteh' ich das richtig?

Schönen Gruß:
27apricot.
 
Ich muss also meinem Editor sagen, er soll die PHP/HTML-Dateien in UTF-8-Codierung speichern, versteh' ich das richtig?
Korrekt. Und genau hier liegt auch bei den meisten der Fehler, wenn sie versuchen mit UTF-8 zu arbeiten. Sie denken, allein die Auszeichnung der Kodierung würde reichen.
 
Hallo,

ich habe jetzt ein Projekt auf UTF-8 umgestellt: Dateien in der Kodierung gespeichert, in den HTML-Meta-Tags die Kodierung definiert und den Formularen das Attribut accept-charset="utf-8" hinzugefügt. Hat bei diesem Projekt alles wunderbar funktioniert. Nicht so bei einem weiteren Projekt, dass ich nun ebenfalls umstellen möchte. Die Dateien werden richtig gelesen ebenso wie neu in die DB (MySQL) eingetragene Daten. Aber die Daten, die vorher schon in der DB standen, werden fehlerhaft ausgegeben.

Bei dem ersten Projekt war das nicht der Fall, obwohl ich auch dort schon vorher Daten in der DB hatte, die in anderer Kodierung eingetragen wurden.

Hab' ich 'was vergessen? Oder muss/kann ich der Datenbank irgendwie den Zeichensatz mitteilen?

Danke im Voraus und schöne Grüße:
27apricot
 
Zurück