XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   (X)HTML (http://xhtmlforum.de/forumdisplay.php?f=72)
-   -   utf8 Fragen und Probleme (http://xhtmlforum.de/showthread.php?t=35238)

lewian 25.04.2005 13:48

utf8 Fragen und Probleme
 
Ich habe ein paar Fragen zur Verwendung von UTF8.
In diesem Thread:
http://www.xhtmlforum.de/viewtopic.p...r=asc&start=30
kommt ja schon viel Licht ins dunkle, leider sind aber für mich immer noch ein paar Ecken schwarz.

Meine Fragen:
1.
Man braucht keine Maskierung mehr bei der Verwendung von UTF8. Denke das kann man so stehen lassen, aber hier wurde geschrieben:
http://www.xhtmlforum.de/viewtopic.php?p=12654#12654
dass man "&" doch maskieren muss, damits keine Fehlermeldungen hagelt.
Warum das bei dem Zeichen? Nur in Links?

2.
Ich verwende die ZendDeveloperEngine 4.0 Professional und speichere meine Dokumente alle standartmäßig in UTF8 und gebe den UTF8-Header in jeder PHP-Datei mit. Wenn ich jetzt Text aus eine DB bekomme, die einen anderen Zeichensatz verwendet, dann muss ich diese Daten erst mittels utf8_encode() umwandeln - lieg ich da richtig?
Was ist mit Ausgaben, die ich in einem Template halte? Müssen die dann auch noch in UTF8 extra umgewandelt werden? Eigentlich nicht, da die Datei ja als UTF8 gespeichert ist oder?
Also muss ich doch eigentlich nur Daten umwandeln, die aus einer anderen Quelle kommen, als das abgespeicherte Dokument (gespeichert als UF8).

3.
Was ist mit Daten aus Cookies und Sessions?
Müssen die bei der nächsten Verwendung erst noch umgewandelt werden?

4.
Ich verwende unter anderen Tidy vom Firefox. Errors werden 0 angezeigt, aber 22 warnings. Diese Warnings zeigen genau auf <a> Zeilen wo Umlaute im URL drin stehen. Ein Beispiel:
line 79 column 11 - Warning: <a> escaping malformed URI reference
und der URL lautet:
<a class="normal_blue" style="color: #000000;" href="http://www.eurogastro.com/test/show_items.php?item_nr=3144001&menu_show=Kochgerät e&sort_show=Friteusen&menu_id=1000&sort_id=1025&ak tion=true" title="Friteuse elektro">

Diese Fehler bekomm ich nicht weg, kann sie mir auch nicht erklären. Die Daten für den URL kommen aus der DB und werden vorher auch mit utf_encode() behandelt. Lasse ich diesen Umwandlungsschritt weg, sind die Fehler auch immer noch da. Keine Ahnung wieso!?

Wenn ich Links (<a href>) deren Inhalt aus einer DB kommt, die einen anderen Zeichensatz verwendet als UTF8, unkonvertiert ausgebe, dann sagt mir Tidy 0 errors und 0 warnings.
w3c meckert allerdings genau an diesen Zeilen herum, dass nicht-valide UTF8 Zeichen in dieser Zeile enthalten wären.

Konvertiere ich die Daten aus der DB mittels utf8_encode(), dann sind in Tidy wieder die warnings da und w3c meckert auch.

Wandel ich die Daten aus der DB allerdings mit htmlentities() ! um, dann zeigt mir Tidy wieder die warnings an, aber w3c wiederum sagt, dass die Seite utf-8 valide ist!?
Es wäre nett, wenn mir jemand einen kleinen Tipp geben könnte, wo hier die Fehler bzw. Denkfehler liegen.

Die Domain worum es sich handelt lautet:
www.eurogastro.com/test/

Wenn die Fragen schon mal irgendwo beantwortet wurden, dann postet bitte den Link dahin. Ich hab gesucht, aber meine Fragen wurden für mich nicht beantwortet.

Vielen Dank im Voraus
Andi

Floele 25.04.2005 14:14

Zitat:

4.
Ich verwende unter anderen Tidy vom Firefox. Errors werden 0 angezeigt, aber 22 warnings. Diese Warnings zeigen genau auf <a> Zeilen wo Umlaute im URL drin stehen. Ein Beispiel:
line 79 column 11 - Warning: <a> escaping malformed URI reference
und der URL lautet:
<a class="normal_blue" style="color: #000000;" href="http://www.eurogastro.mine.nu/show_items.php?item_nr=3144001&menu_show=Kochgerät e&sort_show=Friteusen&menu_id=1000&sort_id=1025&ak tion=true" title="Friteuse elektro">
Das sollte soch allgemein bekannt sein. & in URIs muss durch &amp; ersetzt werden.

Boris 25.04.2005 14:40

Wenn ein UTF-8 Dokument Sessions/Daten erstellt, dann liegen die Daten auch in UTF-8 vor.

Maskieren muss man nichts, außer die Zeichen < > und & (und noch ein paar andere) ... sonst kann der Parser schlecht unterscheiden, ob Du ein HTML-Tag schreibst oder wirklich eine spitze Klammer willst.

Darum brauchst Du Dich aber nicht kümmern, nimm dazu die funktion htmlspecialchars: http://de.php.net/manual/en/function...ecialchars.php

lewian 25.04.2005 15:28

@Floele
Ja das ist mir auch bekannt und wird auch von mir so verwendet.
Ich bin gerade am probieren und hab leider einen Versuchslink gepostet - ist mir nicht aufgefallen, sorry.

Also die &amp; sind nicht der Grund der Problematik, denn mit denen sind die warnings von Tidy auch vorhanden.

@Boris
das mit den Sessions hab ich mir auch so erklärt - wollte nur nochmal sicher gehen.
Hm... Deiner Erklärung mit den htmlspecialchars() kann ich nicht ganz folgen. Was mache ich in meinem Fall, wenn die ganzen HTML relevanten Sachen in Templates stehen? Da brauch ich ja normal keine Umwandlung!?

Beispiel:
wo kommen bei diesem Link die 36 warnings von Tidy her?
Tidy mit Firefox 1.0.1
http://www.eurogastro.com/test/show_...0&sort_id=9012
Die Daten für die Links in den einzelnen Artikeln stehen in einem Template welches in UTF8 gespeichert ist.
w3c sagt es ist valide, nur die warnings von Tidy kann ich mir nicht erklären.

Danke Gruss Andi

Boris 25.04.2005 15:38

Wenn Du in Templates lauter unmaskierte Zeichen hast wie z.B: &, dann musst Du es überall auch manuell ändern in &amp usw. ...

lewian 25.04.2005 15:49

Das ist mir schon klar, dass man diese Zeichen im HTML dementsprechend ändern muss.

Hier ist mal ein Auszug aus einem Template, der zur Darstellung von den Artikeln in dem oben geposteten Link führt:
Code:

<fieldset style="margin-top: 5px;border: 1px solid #000000;">
        <legend>
                {item_name}
        </legend>
        <div style="float: left;padding: 6px 6px 0px;">
                [img]{http_server}/images/{item_picture}.gif[/img]

        </div>
        <div style="padding: 6px 0px 6px 100px;">
                Artikelnummer:{item_nr}

                Artikelbeschreibung:{item_description}

               

                <div style="float: left;">
                        <span style="font-size: 14px;color: #ff0000;">Preis: {item_price} €</span><span style="font-size: 10px;">(zzgl. 16% MwSt.)</span>
                </div>
                <div style="float: right;margin-right: 1em;">
                        weitere Details &raquo;
                </div>
                <div class="clear mozclear"></div>
        </div>
        <div class="clear mozclear"></div>
</fieldset>

Was ist hieran noch falsch? Bzw. was ist nicht erlaubt?
Wo kommen die Warnings von Tidy her?

Danke Gruss Andi

Floele 25.04.2005 15:55

Guck mal hier:
http://validator.w3.org/check?verbos...sort_id%3D9012

Wie man sieht: Alles wohlgeformt. Also: Der Fehler liegt vermutlich in dem Programm und nicht in deiner Seite :)

lewian 25.04.2005 23:17

Das hatte ich ja schonmal geschrieben, dass w3c sagt es ist valide.
Das komische sind ja die warnings von Tidy - ein Bug in Tidy glaub ich nicht, auf www.wikipedia.de ist ja auch alles ok, also 0 errors und 0 warnings.

Ich hab noch ein bisschen experimentiert, doch leider nur noch mehr Merkwürdigkeiten aufgedeckt...

Sobald ein Umlaut in dem Link enthalten ist und man für diesen Eintrag utf8_decode() anwendet, dann gibts 0 errors und 0 warnings, aber der Umlaut wird ja dann falsch dargestellt, somit fällt die Seite bei w3c durch.

http://www.eurogastro.com/test/show_...0&sort_id=9012

Merkwürdig ist noch eins: Ich habe auf dieser Seite ganz unten eine Seitenzahl und nur bei der Generierung des Seitenzahllinks habe ich mal für die Umlaute utf8_decode() angewendet.
Alle Artikel auf der Seite beeinhalten Haargenau den gleichen Link nur mit dem Zusatz ?item_nr=nummer&amp;..... und werden nicht mit utf8_decode() behandelt.
w3c zeigt mir dann auch nur dieses eine Zeichen im Seitenzahllink als Fehler an:
Sorry, I am unable to validate this document because on line 200 it contained one or more bytes that I cannot interpret as utf-8

Lasse ich in dem Seitenzahllink das utf8_decode() raus, kommen wieder die warnings, aber es ist dann w3c konform :shock:

:?:
Wieso dieses Verhalten?
Wie müsste ein Link korrekt aussehen um w3c-konform zu sein und Tidy zu 0 warnings zu überreden?

Hoffe es kann mich jemand aufklären!
Gruss Andi

kasper 26.04.2005 17:41

Zitat:

Zitat von Boris ([url=http://www.xhtmlforum.de/viewtopic.php?p=25745#25745
¶[/url])]Maskieren muss man nichts, außer die Zeichen < > und & (und noch ein paar andere) ...

Welche wären diese paar anderen Zeichen? ;)

(BTW: Eigentlich braucht nichtmal das „>“ maskiert werden. Nur „<“ und „&“ – und das auch nicht in allen Fällen, wenn HTML verwendet wird. Aber man geht natürlich auf Nummer sicher, wenn man die Faustregel „<“, „>“ und „&“ immer maskieren anwendet.)


Zitat:

Zitat von lewian ([url=http://www.xhtmlforum.de/viewtopic.php?p=25800#25800
¶[/url])]Das hatte ich ja schonmal geschrieben, dass w3c sagt es ist valide.

Ganz allgemein: Der W3C-Validator kann nicht jeden Fehler finden. Für XHTML nimmt man besser einen Schema-Validator wie den von Christoph Schneegans: http://schneegans.de/sv/

Boris 27.04.2005 00:15

Zitat:

Zitat von kasper
Welche wären diese paar anderen Zeichen? ;)

The translations performed are:

'&' (ampersand) becomes '&amp;'

'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.

''' (single quote) becomes ''' only when ENT_QUOTES is set.

'<' (less than) becomes '&lt;'

'>' (greater than) becomes '&gt;'

Mit PHP: http://de.php.net/manual/en/function...ecialchars.php


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:45 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2019, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2019