Wiedermal ein Umlaute-Problem
Gernot
- html
0 flowh0 Gernot0 Tobias Pelster0 Gernot
0 flowh0 Hopsel0 Sven Rautenberg
0 dedlfix
0 wahsaga
Hallo!
Ich weiß, dass das bestimmt eine häufig gestellte Frage ist, aber ich hab schon so viel nach Lösungsmethoden gesucht und leider keine gefunden.
Ich habe eine MySQL-Datenbank von der ich Texte auslese und mittels PHP ausgeben möchte. Problem: Umlaute!
Statt einem ü steht zum Beispiel ein A mit einer Tilde und ein 1/4 - Zeichen. Das umstellen des Zeichensatzes auf ISO8859-1 oder UTF-8 bringt nichts und auch der Befehl htmlentities() wandelt die Zeichen falsch um, so dass die Ausgabe im Browser immer A Tilde... usw ist.
Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.
Laut w3c ist die Page aber XHTML 1.0 strict und sieht zur Zeit so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>
<title>Testpage</title>
</head>
<body>
<?php
include_once('DBProvider.php');
$db = new DBProvider('localhost', 'user' 'root', '');
$db->query("SELECT * FROM TextArt");
while ($object = $db->fetchObject())
{
print(($object->Bezeichnung)) . '<br/>';
}
?>
</body>
</html>
Vielen Dank für eure Hilfe!
Hallo Gernot!
Ich weiß, dass das bestimmt eine häufig gestellte Frage ist
Stimmt.
Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.
Ja, der Firefox stellt wieder auf die vorgegebene Kodierung um, sobald die Seite neu geladen wird.
<meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>
Ja wenn die Seite mit UTF-8 korrekt angezeigt wird, warum gibst du das denn hier nicht auch so an? Aber Achtung: diese Angabe wird von Browsern eigentlich nur interpretiert, wenn das Dokument lokal (ohne Server) aufgerufen wird. Aufgrund des PHP-Codes gehe ich einmal davon aus, dass das nicht der Fall ist.
Die Lösung für dein Problem dürfte sein, serverseitig (z.B. per PHP oder in der Apache-Konfiguration) die entsprechenden Kodierung im Header anzugeben.
Servus
Hi!
Erstmal danke für deine Antwort!
Das Problem ist, dass er es völlig ignoriert, ob ich charset auf ISO oder UTF stelle. Sogar der W3C-Validator sagt, dass er diese Einstellung einfach ignoriert und auf ISO stellt...
Naja wenn ich das serverseitig einstellen muss und die Homepage möglicherweise auf einem Webspace landet, wo ich das nicht darf, dann hab ich aber ein Problem :-)
Hallo Gernot!
Ich weiß, dass das bestimmt eine häufig gestellte Frage ist
Stimmt.Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.
Ja, der Firefox stellt wieder auf die vorgegebene Kodierung um, sobald die Seite neu geladen wird.<meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>
Ja wenn die Seite mit UTF-8 korrekt angezeigt wird, warum gibst du das denn hier nicht auch so an? Aber Achtung: diese Angabe wird von Browsern eigentlich nur interpretiert, wenn das Dokument lokal (ohne Server) aufgerufen wird. Aufgrund des PHP-Codes gehe ich einmal davon aus, dass das nicht der Fall ist.Die Lösung für dein Problem dürfte sein, serverseitig (z.B. per PHP oder in der Apache-Konfiguration) die entsprechenden Kodierung im Header anzugeben.
Servus
Hallo zusammen!
Mal so ins Blaue: schon mal folgenden Header versucht? :
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
...
Ansonsten kann ich euch für den Firefox noch die Erweiterung "Web Developer" empfehlen. U.A. zeigt diese sofort an, ob die Webseite richtig definiert wurde. (Oder ob in den Quirks-Modus zurückgesprungen wird....).
Tobi
Hi!
Habs gefunden, man muss seit der MySQL Version 4.1 ein SET NAMES Latin1 ausführen
Hallo Gernot!
Das Problem ist, dass er es völlig ignoriert, ob ich charset auf ISO oder UTF stelle.
Ja... sobald das Dokument im HTTP-Kontext aufgerufen wird, wird die meta Angabe "http-equiv" (=HTTP-Ersatz) ignoriert.
Naja wenn ich das serverseitig einstellen muss und die Homepage möglicherweise auf einem Webspace landet, wo ich das nicht darf, dann hab ich aber ein Problem :-)
Stimmt, aber Webspace mit PHP (das reicht ja) ist heutzutage eigentlich nicht wirklich teuer.
BTW: Bitte keine TOFUs!
Servus
Hi Gernot!
Mit welcher Kodierung speicherst du die Dokumente ab?
MfG H☼psel
Moin!
Naja wenn ich das serverseitig einstellen muss und die Homepage möglicherweise auf einem Webspace landet, wo ich das nicht darf, dann hab ich aber ein Problem :-)
Du mußt ja zwingend PHP benutzen auf irgendeinem Webspace. Mit PHP kannst du problemlos beliebige HTTP-Header senden (header()-Funktion) - also kannst du auch den von PHP erzeugten Charset senden. Vollkommen ohne Servereinstellungen.
- Sven Rautenberg
echo $begrüßung;
Ich habe eine MySQL-Datenbank von der ich Texte auslese und mittels PHP ausgeben möchte. Problem: Umlaute!
Welche Version hat der MySQL-Server? Wenn größer oder gleich 4.1: Was ergibt die Abfrage SHOW VARIABLES LIKE 'character_set%'?
Welche Zeichenkodierung möchtest du verwenden, ISO8859-1 oder UTF-8?
Statt einem ü steht zum Beispiel ein A mit einer Tilde und ein 1/4 - Zeichen.
So sieht es aus, wenn man UTF-8-kodierte Daten als ISO-8859-1 interpretiert.
[...] der Befehl htmlentities() wandelt die Zeichen falsch um [...]
htmlentities() erwartet Strings, die nach ISO-8859-1 kodiert sind.
Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.
<meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>
Diese Meta-Angabe ist nur ein Ersatz für den Fall, dass der Server keine Angaben zu Inhalt (wieso eigentlich text/plain?) und Kodierung macht. (Die livehttpheaders-Extension für den Firefox zeigt beispielsweise an, was der Server sendet.)
Die charset-Angabe im HTTP-Header oder im Meta-Element gibt dem Empfänger an, in welcher Kodierung das Dokument vorliegt, damit er die ankommende Bytefolge richtig interpretieren kann. Wenn diese Angabe nicht mit der tatsächlichen Kodierung übereinstimmt, kann es zu Datenmüll kommen. (Und noch mehr Murks kommt raus, wenn die restliche Seite in Kodierung X gehalten ist, aber externe Daten in Kodierung Y einbindet.)
echo "$verabschiedung $name";
hi,
htmlentities() erwartet Strings, die nach ISO-8859-1 kodiert sind.
Per Default - aber über den dritten Parameter kann man auch in anderen Zeichentabellen ersetzen lassen.
gruß,
wahsaga