Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > UTF-8 bei Templatesystem
Antwort
 
Themen-Optionen
Alt 28.03.2008, 13:48   Nach oben    #1
CIX88
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 585
Standard UTF-8 bei Templatesystem

benutztes Templatesystem:
[PHP] Ein eigenes Templatesystem schreiben

Jetzt hab ich damit einige Probleme bezüglich UTF-8.
Wenn ich in den Sprachdateien Umlaute benutze, kommt nur noch mist raus.
Als mal versucht, die Sprachdateien als UTF-8 Datei abzuspeichern - erfolglos.
Alles andere geht wunderbar, aber Texte aus diesen Sprachdateien nicht.

Hatte jemand mal ähnliche Probleme?
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 16:30   Nach oben    #2
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 659
Standard

In meiner Template-Engine nutze ich auch Sprachdateien und schreibe die Umlaute direkt dort hinein. Beim Parsen des Templates wird dann mittels html_entities alles entsprechend in HTML-Code umgewandelt - Funktioniert wunderbar. Ich weiß jetzt allerdings nicht genau, wie die obig beschriebene Template-Engine diesbezüglich arbeitet, aber ich glaube nicht, dass UTF-8 die Lösung ist oder willst du die Umlaute im Klartext an den Browser übermitteln?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 18:45   Nach oben    #3
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

Also:
template-Dateien sind als UTF-8 gespeichert mit Umlauten drin ?

Du sendest einen passendes Content-Type-Header mit Charset ?

Und hast auch mal noch
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
im HTML drin ?

fehlt vielleicht einer dieser Punkte ?
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 19:41   Nach oben    #4
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 659
Standard

Sind HTML-Dateien nicht trotzdem invalid, wenn der Charset auf UTF-8 gestellt wird und die Umlaute im Klartext drinstehen? Oder ist der HTML-Standard so gut, dass er das unterscheidet? Würde mich mal interessieren!? Denn UTF-8 braucht man ja nicht, wenn man die Umlaute in HTML-Codes umwandelt!?
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 19:48   Nach oben    #5
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

Zitat:
Zitat von MrNiceGuy Beitrag anzeigen
Sind HTML-Dateien nicht trotzdem invalid, wenn der Charset auf UTF-8 gestellt wird und die Umlaute im Klartext drinstehen? Oder ist der HTML-Standard so gut, dass er das unterscheidet? Würde mich mal interessieren!? Denn UTF-8 braucht man ja nicht, wenn man die Umlaute in HTML-Codes umwandelt!?
Gerade das ist doch der Vorteil bei UTF-8, dass man eben nicht jeden Umlaut oder sonstwas in irgendwelche HTML-Codes umwandeln muss (bis auf neuere Zeichen wie beispielsweise das €-Zeichen).

Nur btw. in ISO 8859-1 musst du die deutschen Umlaute (äöü und das ß ) auch nicht umwandeln!
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 20:04   Nach oben    #6
MrNiceGuy
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 659
Standard

Dass es der Vorteil der Codierung ansich ist, ist mir irgendwie schon klar, was ich mich halt frage ist, ob der Validator des W3C dies berücksichtigt bzw. der Standard HTML ansich und somit auch alle Browser oder ob das auch nur "auf gut Glück" funktioniert!? Habe mich damit noch nicht so wahnsinnig auseinandergesetzt bisher
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 20:09   Nach oben    #7
Hobbyuser
Benutzer
 
Registriert seit: 12.08.2006
Beiträge: 38
Standard

Zitat:
Zitat von robo47 Beitrag anzeigen
Und hast auch mal noch
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
im HTML drin ?
Dieser Punkt ist völlig egal, weil...

... das nicht HTML ist sondern XHTML, zu erkennen an dem Slash (Endtag).
... bei XHTML der META-Tag für die Zeichenkodierung eigentlich unwichtig ist.

Ich vermute, das PHP eine Umwandlung beim speichern vornimmt.

@MrNiceGuy
Bei XHTML ist UTF-8 sogar der Standardzeichensatz und es könnte ganz auf die Angabe der Codierung verzichtet werden.


Gruß
Hobbyuser
Hobbyuser ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 20:50   Nach oben    #8
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

Zitat:
Zitat von Hobbyuser Beitrag anzeigen
Zitat:
Zitat von robo47 Beitrag anzeigen
Und hast auch mal noch
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
im HTML drin ?
Dieser Punkt ist völlig egal, weil...

... das nicht HTML ist sondern XHTML, zu erkennen an dem Slash (Endtag).
Ist aber gleichzeitig auch valides HTML.

Zitat:
... bei XHTML der META-Tag für die Zeichenkodierung eigentlich unwichtig ist.
Wenn der Webserver falsch konfiguriert ist / das Script kein Charset beim Content-Type-Header mitschickt, gibt es in manchen Browsern ein Fallback, das zuerst auf den via meta übergebenen Content-Type/Charset-Wert überprüft, falls vorhanden den nutzt und dann das Browser-interne [eingestellte] Standard-Charset nutzt. Ausserdem selbst wenn man XHTML nutzt, in den wenigstens fällen schickt man es wirklich als xhtml an den client und der nutzt dann eh den normalen HTML-Parser anstatt nem XML-Parser, weil der wird ja nur benutzt wenn ein application/xhtml+xml oder anderer XML-Header kommt.

Zitat:
Zitat von Hobbyuser Beitrag anzeigen
Ich vermute, das PHP eine Umwandlung beim speichern vornimmt.
PHP 4 und 5 unterscheiden keine Kodierungen, es sieht nur Bytes, was auch bei den ganzen Standardfunktionen so zu sehen ist, z.b. strlen liefert z.b. bei Zeichenketten mit UTF-8-Zeichen die mehr als Byte lang sind dementsprechend auch eine höhere Länge zurück. (Wer mit UTF-8 oder anderen Kodierungen die Zeichen mit mehr als einem Byte für einzelne Zeichen nutzen sollten daher die mb_*-Funktionen nutzen.)

Daher ist es eher unwahrscheinlich, dass eine der Standard-PHP-Funktionen eine Umwandlung vornimmt.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 21:50   Nach oben    #9
CIX88
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 585
Standard

Also ich habe jetzt in den Sprachdateien (als Notlösung) immer utf8_encode() vor die Zeilen gesetzt. Das war bisher die einzigste Lösung. Alles andere geht auch wunderbar, nur eben die Sprachdateien wollten keine UTF-8-Ausgabe machen.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 22:00   Nach oben    #10
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

also mal angenommen du hast Sprachdateien die wirklich schon utf8 sind und jagst da utf8_encode drüber, dann muss eigentlich logischer weise dein System irgendwo wieder utf8_decode [oder etwas gleichwertiges] aufrufen sonst würdest du auch wieder Mist ausgegeben bekommen, arbeitest du noch mit irgendeiner anderen extension oder so ? z.b. tidy um den html-code zu formatieren / validieren / etc ?
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 22:21   Nach oben    #11
CIX88
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 585
Standard

Zitat:
die wirklich schon utf8 sind
Ja wenn das so wäre, müsste ich nicht diesen Umweg gehen.

Natürlich hatte ich auch versucht, diese Dateien als UTF-8 zu speichern. Aber dann hatte ich massenweise Header-Fehler, weil das System vor Header-Anweisungen (Session etc..) irgendwelche nichtsichtbaren Zeichen ausgegeben hat. Umlaute und andere Zeichen gingen aber dennoch nicht.

Vielleicht hängt es mit der Art und Weise zusammen, wie die Sprachdateien geparst werden - keine Ahnung, jedenfalls bin ich heute echt ins grübeln gekommen.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 23:00   Nach oben    #12
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

Zitat:
Zitat von CIX88 Beitrag anzeigen
Zitat:
die wirklich schon utf8 sind
Ja wenn das so wäre, müsste ich nicht diesen Umweg gehen.

Natürlich hatte ich auch versucht, diese Dateien als UTF-8 zu speichern. Aber dann hatte ich massenweise Header-Fehler, weil das System vor Header-Anweisungen (Session etc..) irgendwelche nichtsichtbaren Zeichen ausgegeben hat. Umlaute und andere Zeichen gingen aber dennoch nicht.

Vielleicht hängt es mit der Art und Weise zusammen, wie die Sprachdateien geparst werden - keine Ahnung, jedenfalls bin ich heute echt ins grübeln gekommen.
Dann ist dein Problem ganz einfach
Dein Problem nennt sich BOM ! ( http://de.wikipedia.org/wiki/Byte_Order_Mark )

Dein Editor schreibt an den Anfang JEDER UTF-8-Datei ein spezielles Zeichen, das sie quasi als UTF-8 outet. Jetzt musst du nur noch in deinem Editor finden wo man das umstellen kann, dass das Eben nicht geschrieben wird oder einen anderen Editor zum konvertieren nutzen. Das Teil ist nämlich nicht wirklich nötig in deinem Fall.

siehe auch dieser Thread:
Was ist das denn?
oder hier:
http://www.phpfriend.de/forum/ftopic63630.html
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 23:19   Nach oben    #13
CIX88
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 585
Standard

Jo das ist mir dann beim Online-Editieren der Templates aufgefallen, dass überall ein ? am Anfang steht. Naja jetzt hab ich Wochenende, und werde mir das Montag wieder angucken
Aber danke für den Hinweis!

EDIT:

Ähmm Moment mal, aber die Zeichen am Anfang haben vorher nicht gestört, erst im zusammenhang mit der Sprachdatei.
Die Templates hatte alle so ein Zeichen am Anfang, komisch dass ich da keine Probleme hatte. Achhhh neeee, ich mach jetzt Wochenende ...

Geändert von CIX88 (28.03.2008 um 23:23 Uhr).
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2008, 23:39   Nach oben    #14
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

Zitat:
Zitat von CIX88 Beitrag anzeigen
Jo das ist mir dann beim Online-Editieren der Templates aufgefallen, dass überall ein ? am Anfang steht. Naja jetzt hab ich Wochenende, und werde mir das Montag wieder angucken
Aber danke für den Hinweis!

EDIT:

Ähmm Moment mal, aber die Zeichen am Anfang haben vorher nicht gestört, erst im zusammenhang mit der Sprachdatei.
Die Templates hatte alle so ein Zeichen am Anfang, komisch dass ich da keine Probleme hatte. Achhhh neeee, ich mach jetzt Wochenende ...
Die Sprachdateien includierst du ja -> wahrscheinlich ohne irgendwo mit ob_start zu arbeiten oder ähnliches
und die Templates wirst du wohl mit fopen / file_get_contents oder sowas laden

Deshalb tritt das Problem nur beim includieren auf, dass PHP dann Probleme macht, bei der Ausgabe fallen sie nicht unbedingt auf.
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2008, 05:45   Nach oben    #15
Hobbyuser
Benutzer
 
Registriert seit: 12.08.2006
Beiträge: 38
Standard

Zitat:
Zitat von robo47
Ist aber gleichzeitig auch valides HTML.
Sorry, aber da irrst du!
Zitat:
Zitat von SelfHTML
In HTML 4.0 gibt es diverse leere Elemente. Das sind Elemente ohne Inhalt. Das Abschluss-Tag ist deshalb verboten, weil die Elemente als inhaltsleer definiert sind.
Quelle
Jedenfalls kann ich da nichts von optional oder zulässig lesen.


Die Zeichenkodierung wird bei XHTML über die XML-Deklaration übermittelt (siehe SelfHTML). Das ist der korrekte Weg. Wobei wie gesagt UTF-8 die Standardkodierung ist und gar nicht angegeben werden müsste.
Nachzulesen im gleichen Abschnitt von SelfHTML unter "Beachten Sie:".
Hobbyuser ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2008, 09:56   Nach oben    #16
CIX88
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 585
Standard

Ähmmm, XHTML, valides HTML ... Content-Type, war eigentlich nicht Gegenstand meiner Frage.

@robo47
Jo hatte mittels include() und ob_start() probiert, ging aber auch nicht so wirklich.
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2008, 12:29   Nach oben    #17
Basti
Erfahrener Benutzer
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 774
Standard

OT:

Zitat:
Zitat von Hobbyuser Beitrag anzeigen
Zitat:
Zitat von robo47
Ist aber gleichzeitig auch valides HTML.
Sorry, aber da irrst du!
Zitat:
Zitat von SelfHTML
In HTML 4.0 gibt es diverse leere Elemente. Das sind Elemente ohne Inhalt. Das Abschluss-Tag ist deshalb verboten, weil die Elemente als inhaltsleer definiert sind.
Quelle
Jedenfalls kann ich da nichts von optional oder zulässig lesen.
Ich bin mir sicher, dass diese Notation (z.B. <br/>) in HTML erlaubt ist, kanns aber nicht belegen bzw. nicht wirklich nachvollziehen, was da wie in SGML definiert ist (mit und ohne Web SGML Adaptations Annex, mit oder ohne Technical Corrigendum 2). Das übersteigt mein Interesse. Aber SelfHTML ist da sicherlich keine Referenz.

Basti
Basti ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.03.2008, 12:45   Nach oben    #18
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.182
Standard

Zitat:
Zitat von Basti Beitrag anzeigen
OT:

Zitat:
Zitat von Hobbyuser Beitrag anzeigen
Zitat:
Zitat von robo47
Ist aber gleichzeitig auch valides HTML.
Sorry, aber da irrst du!
Zitat:
Zitat von