Archiv verlassen und diese Seite im Standarddesign anzeigen : Seite utf-8 kodiert, welches Vorgehen?
Seikilos 05-02-2008, 15:19 Ich hab ein kleines Problem, eine Seite ist vollständig UTF-8 kodiert.
Dort habe ich ein Eingabeformular, Beispiel Login.
Dieser Name wird in ein Cookie gespeichert und beim nächsten Besuch wieder angezeigt.
Das Problem ist aber, dass ich ja die Ausgabe der Seite utf-8 kodiere, grob gesagt am ende ist ein echo utf8_encode($content); welcher mir alles schön kodiert.
Aber damit habe ich dann ja Probleme, denn der Login, den ich im Cookie gespeichert habe, ist ja utf-8 kodiert und wird auf der Seite irgendwo angezeigt, "Willkommen {name}".
Wenn ich nun meinen String mit dem Cookie Wert fülle, so bekomme ich ja murks bei der Ausgabe, weil ich an dieser Stelle utf-8 nochmal mit utf-8 kodiere.
Wie sollte man da vorgehen? Zum Beispiel habe ich keinerlei Probleme mit der mysql Verbindung, die Tabelle ist UTF-8 und die Client-Verbindung auch, ich kann dort also ohne Probleme den utf-8 kodierten Login namen ins query packen und es klappt auch mit umlauten
Aber was machen, bei dem oben beschriebenen Problem?
Das Problem ist aber, dass ich ja die Ausgabe der Seite utf-8 kodiere, grob gesagt am ende ist ein echo utf8_encode($content); welcher mir alles schön kodiert. das sollte im Normalfall gar nicht nötig sein, wenn du die Daten entsprechend vorhältst.
Seikilos 05-02-2008, 15:29 Teilkomponenten der Struktur, also Templates kommen nicht von mir und sind oft falsch kodiert, daher das kodieren am Ende.
Du meinst ich sollte die Kodierung nur auf einzelne Teile anwenden?
Wie sieht denn dann so etwas aus
<?php
$var = "öäüß";
header("Content-type: text/html; charset=UTF-8");
echo $var;
?>
Würde dies nicht falsch interpretiert werden? Oder wäre $var automatisch dann utf-8?
In dem Zusammenhang hatte ich, meine ich, das Problem, dass meine wirklichen Kodierung in dem obigen Fall ISO war, der Header aber abweichend den Content Type als utf-8 deklariert hat
Teilkomponenten der Struktur, also Templates kommen nicht von mir und sind oft falsch kodiert, daher das kodieren am Ende.
Du meinst ich sollte die Kodierung nur auf einzelne Teile anwenden? Nee, ich meine dass du alle Teile schon vorher entsprechend encodet haben sollst.
Also gerade bei so lächerlichen Sachen wie Templates muss das einfach möglich sein. Ich könnte maximal nachvollziehen, wenn du nen externen Webservice abfragst, dass du da noch was on the fly kodieren musst. Aber doch nicht bei Bestandsdaten deines EIGENEN Systems.
Würde dies nicht falsch interpretiert werden? Oder wäre $var automatisch dann utf-8? Kommt drauf an, als was du deine Datei speicherst...
In dem Zusammenhang hatte ich, meine ich, das Problem, dass meine wirklichen Kodierung in dem obigen Fall ISO war, der Header aber abweichend den Content Type als utf-8 deklariert hat Du kennst doch dein Problem, warum überarbeitest du nicht einfach deine Fehler und freust dich über nen sauberes System, anstatt hier jeden einzelnen bestandteil deiner Anwendung so umzukodieren, wie du ihn aktuell brauchst? Oder willst du bei der nächsten Änderung deines Designers wieder die komplette Software anpassen?
Seikilos 05-02-2008, 15:53 Sind zwei paar Schuhe, beim Beispiel oben meinte ich dies als Ausgabe an den Browser, erkennt er da dass die $var utf8 ist?
Und ich kann das System nicht umschreiben, ich habe es nicht entwickelt und es gibt keine Ressourcen für ein komplettes Refactoring, ich wühle quasi in Resten hier :)
Sind zwei paar Schuhe, beim Beispiel oben meinte ich dies als Ausgabe an den Browser, erkennt er da dass die $var utf8 ist? Wenn die Variable utf8 ist und dem browser der entsprechende header/meta-tag gezeigt wird: na klar.
Wie gesagt, wenn du die datei nicht als utf-8 speicherst, wird der natürlich mucken.
Beides eigentlich logisch!
Und ich kann das System nicht umschreiben, ich habe es nicht entwickelt und es gibt keine Ressourcen für ein komplettes Refactoring, ich wühle quasi in Resten hier Viel Spaß! Jetzt weißt du ja, wo deine Probleme liegen. :D Warum tauchen die eigentlich erst jetzt auf?
Seikilos 05-02-2008, 16:18 Wenn die Variable utf8
Was heißt das? Wann ist eine Variable utf8?
Die PHP Datei ist natürlich als UTF-8 gespeichert, aber die $var ist einfach als $var = "öäüß"; deklariert
Warum tauchen die eigentlich erst jetzt auf?
Das weiß ich nicht, das System ist hier seit einem Jahr stabil und auf einmal tritt dieses Fehler auf, obwohl mir nicht klar ist, was passiert ist, denn eigentlich war niemand am code dran
Was heißt das? Wann ist eine Variable utf8?
Die PHP Datei ist natürlich als UTF-8 gespeichert, aber die $var ist einfach als $var = "öäüß"; deklariert Ja, dann ist alles so wie es sein soll. Also wird die Variable auch korrekt ausgegeben.
Das weiß ich nicht, das System ist hier seit einem Jahr stabil und auf einmal tritt dieses Fehler auf, obwohl mir nicht klar ist, was passiert ist, denn eigentlich war niemand am code dran Ja, das ist immer so. :D
Original geschrieben von Seikilos
Und ich kann das System nicht umschreiben, ich habe es nicht entwickelt und es gibt keine Ressourcen für ein komplettes Refactoring, ich wühle quasi in Resten hier :) [/B]
Du sollst auch nicht das System umschreiben, du sollst einfach nur deine Templates UTF-8 kodieren. ;)
Ist nen typischer Fall für
find . -name '*.tpl' -exec recode latin1..u8 {} \;
Seikilos 05-02-2008, 16:37 Kann man eigentlich die kodierung eines String irgendwie ermitteln? Das wäre wenigstens eine "erste Hilfe" für das Problem.
Original geschrieben von Seikilos
Kann man eigentlich die kodierung eines String irgendwie ermitteln? Das wäre wenigstens eine "erste Hilfe" für das Problem.
Ja, mit http://de2.php.net/manual/en/function.mb-detect-encoding.php
Seikilos 05-02-2008, 16:44 Oh, großartig, das rettet mir erstmal den Rest des Tages :)
Danke euch beiden.
Hab ne Menge lernen können
|
-
- |