Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Umlaute

0 views
Skip to first unread message

Martin Nadoll

unread,
Jan 26, 2010, 5:18:13 AM1/26/10
to
Hallo,

ich habe eine MySQL-Tabelle type MyISAM utf8_general_ci.

Ich will Datens�tze in eine Webseite einlesen:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Welcome</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

Es gibt Probleme mit den Umlauten, die in der Webseite nicht korrekt
dargestellt werden. Man sieht anstelle eines Umlautes nur ein Fragezeichen
oder ein Viereck.
In der Datenbank �ber phpMyAdmin kontrolliert, sehe ich aber die Umlaute
korrekt in den Datens�tzen.
Auch php str_replace() hilft nicht...
Es kommen also bei der Datenbankabfrage schon keine Umlaute mehr an, obwohl
diese in den Datens�tzen stehen.
Wenn ich direkt Umlaute in die Webseite schreibe, werden diese korrekt
dargestellt.

Kann mir jemand sagen, was ich hier falsch mache?

Danke,
Martin Nadoll

Claus Reibenstein

unread,
Jan 26, 2010, 7:12:47 AM1/26/10
to
Martin Nadoll schrieb:

> ich habe eine MySQL-Tabelle type MyISAM utf8_general_ci.

Irrelevant.

> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Die Seite erwartet also die Daten in UTF-8-Codierung.

> Es gibt Probleme mit den Umlauten, die in der Webseite nicht korrekt
> dargestellt werden. Man sieht anstelle eines Umlautes nur ein Fragezeichen
> oder ein Viereck.

Du hast vergessen, der Datenbank zu sagen, dass sie die Daten als UTF-8
ausliefern soll.

Setze mal nach der Verbindung zur Datenbank als erstes den Befehl

SET NAMES 'UTF-8'

ab. Dann sollte es klappen.

> In der Datenbank ᅵber phpMyAdmin kontrolliert, sehe ich aber die Umlaute
> korrekt in den Datensᅵtzen.

Weil phpMyAdmin die Verbindung korrekt auf UTF-8 einstellt.

Gruᅵ. Claus

Ulf [Kado] Kadner

unread,
Jan 26, 2010, 8:25:53 AM1/26/10
to
Hallo Martin Nadoll, Du schriebst:

> Hallo,
>
> ich habe eine MySQL-Tabelle type MyISAM utf8_general_ci.

Die Sortierreihenfolge interessiert nicht wirklich.

> Ich will Datensätze in eine Webseite einlesen: <!DOCTYPE html PUBLIC


> "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html
> xmlns="http://www.w3.org/1999/xhtml"> <head>
> <title>Welcome</title>
> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
> </head>

Ja fein das ist HTML was Du warscheinlich an den Client schickst.

> Es gibt Probleme mit den Umlauten, die in der Webseite nicht korrekt
> dargestellt werden.

OK. Hier müssen einige Dinge beachtet werden, wenn Du laut HTML Meta-
Daten utf-8 ausliefern willst

1. Du solltest eine MySql-Verbindung aufbauen die den Server sagt, das
Du als Client die Daten gern, codiert als utf-8, mit diesem
austauschen willst. Als erst die Verbindung herstellen und dann
'SET NAMES utf8' als Query ausführen
2. Du solltest dem Webbrowser mitteilen das die Daten die er jetzt von
Dir (z.B. als HTML) erhält in dieser Codierung (utf-8) kommen.
Dazu reicht es nicht uns HTML eine meta-Angabe zu schreiben! Du musst
dazu, bevor Du irgendetwas an HTML ausgibst den Content-Type
HTTP-Header mit entsprechender charsetangabe senden
header('Content-Type: text/html; charset=utf-8');

Wenn die Daten in der Datenbank bereits mit richtiger Codierung eingefügt
wurden führen bereits meine Hinweise zum Ziel. Anderen Falles must Du
die Codierungen für den Output nutzen, mit der die Daten in der DB
einefügt wurden.

MfG, Ulf

Claus Reibenstein

unread,
Jan 26, 2010, 4:00:32 PM1/26/10
to
Ulf [Kado] Kadner schrieb:

> 2. Du solltest dem Webbrowser mitteilen das die Daten die er jetzt von
> Dir (z.B. als HTML) erhält in dieser Codierung (utf-8) kommen.

Hat er.

> Dazu reicht es nicht uns HTML eine meta-Angabe zu schreiben!

Doch.

> Du musst
> dazu, bevor Du irgendetwas an HTML ausgibst den Content-Type
> HTTP-Header mit entsprechender charsetangabe senden
> header('Content-Type: text/html; charset=utf-8');

Nein, muss er nicht. Eins von beidem genügt.

Gruß. Claus

Ulf [Kado] Kadner

unread,
Jan 27, 2010, 4:04:21 AM1/27/10
to
Hallo Claus Reibenstein, Du schriebst:

> Ulf [Kado] Kadner schrieb:
>
>> 2. Du solltest dem Webbrowser mitteilen das die Daten die er jetzt von
>> Dir (z.B. als HTML) erhält in dieser Codierung (utf-8) kommen.
>
> Hat er.
>
>> Dazu reicht es nicht uns HTML eine meta-Angabe zu schreiben!
>
> Doch.

Reibenstein, 6, setzen! Bitte beließ Dich doch erstmal wenn Du etwas
nicht weist. Mal abgesehen davon das Du hier neben Behauptungen auch
Belege aufzeigen solltest.

>> Du musst
>> dazu, bevor Du irgendetwas an HTML ausgibst den Content-Type
>> HTTP-Header mit entsprechender charsetangabe senden
>> header('Content-Type: text/html; charset=utf-8');
>
> Nein, muss er nicht. Eins von beidem genügt.

Märchenstunde ist nur Freitags

Sam Kang

unread,
Jan 27, 2010, 4:10:47 AM1/27/10
to
Claus Reibenstein schrieb:
> Ulf [Kado] Kadner schrieb:

>> Du musst
>> dazu, bevor Du irgendetwas an HTML ausgibst den Content-Type
>> HTTP-Header mit entsprechender charsetangabe senden
>> header('Content-Type: text/html; charset=utf-8');
>
> Nein, muss er nicht. Eins von beidem genügt.

Ist so nicht ganz richtig. Der erste "Content-Type:" Header wird von Browser
genommen. Wenn der WWW-Server (und fast alle haben eine Voreinstellung) ein
"Content-Type: text/html; charset=iso-irgendwas" sendet wird der genutzt und
das Metatag ignoriert.

In diesem Fall muss er den Http Header selber senden, da er den Zeichensatz
sonst nicht mehr auf utf8 umgestellt bekommt.

Wenn der OP zusätzlich noch das HTML nicht via HTTP lädt ist das meta tag
wieder nützlich um den Browser einzustellen.

Wenn der UA fest auf einen Zeichensatz eingestellt ist dann wird beides ignoriert.

Sam

--
Sufficiently advanced incompetence is indistinguishable from malice
(J. Porter Clark)

Carsten Wiedmann

unread,
Jan 27, 2010, 5:45:38 AM1/27/10
to
Am 27.01.2010 10:10, schrieb Sam Kang:
> Ist so nicht ganz richtig. Der erste "Content-Type:" Header wird von
> Browser genommen. Wenn der WWW-Server (und fast alle haben eine
> Voreinstellung) ein "Content-Type: text/html; charset=iso-irgendwas"
> sendet wird der genutzt und das Metatag ignoriert.

Ein normal konfigurierter Server setzt normal (bei der Dateiendung *.html)
den Content-Type Header auf text/html ohne charset Angabe.
Gerade deshalb, damit man in einem HTML Document das einfach für den Bowser
über einen meat tag anpassen kann (und bei reinem Webspace hätte man ja auch
keine andere Möglichkeit, wenn das nicht zufällig für eine ".htaccess"
zugelassen wird.

Falls das nicht vom Standard abweichend konfiguriert wird, schickt auch z.B.
PHP nur den Content-Type Header text/html ohne charset Angabe mit.

Gruß
Carsten

Ulf [Kado] Kadner

unread,
Jan 27, 2010, 6:00:30 AM1/27/10
to
Hallo Carsten Wiedmann, Du schriebst:

> Ein normal konfigurierter Server setzt normal (bei der Dateiendung
> *.html) den Content-Type Header auf text/html ohne charset Angabe.

Das ist soweit richtig.

> Gerade deshalb, damit man in einem HTML Document das einfach für den
> Bowser über einen meat tag anpassen kann

Probiers doch einfach aus. Manche Browser (Hier FF3.5) interessieren sich
nicht für das was im Meta-Element als Zeichensatz gesetzt ist, solange
dieses über http bzw. ssl angefordert wird. In diesem Fall erfolgt
lediglich ein Fallback auf die für den Client konfigurierte
Defaultkodierung.

Es ist schlicht und ergreifend Pflicht an irgend einer Stelle (Server
oder Script) die Codierung festzulegen, die als HTTP-Header gesendet
werden soll. Und da hier keiner weis wie des OPs Server konfiguriert ist
ist es erst mal unausweichlich die Codierung per header mitzuteilen.

Mfg, Ulf

Sam Kang

unread,
Jan 27, 2010, 6:05:50 AM1/27/10
to
Carsten Wiedmann schrieb:

> Falls das nicht vom Standard abweichend konfiguriert wird, schickt auch z.B.
> PHP nur den Content-Type Header text/html ohne charset Angabe mit.

Dann muss zumindest geprᅵft werden was der eigene Server sendet. Der OP hat
mᅵglicherweise das Problem das Server/PHP doch einen Charset senden. Sich auf
Standards im Fehlerfall ungeprᅵft zu verlassen ist keine Option.

Gregor Kofler

unread,
Jan 27, 2010, 6:11:05 AM1/27/10
to
Ulf [Kado] Kadner meinte:

> Hallo Carsten Wiedmann, Du schriebst:
>
>> Ein normal konfigurierter Server setzt normal (bei der Dateiendung
>> *.html) den Content-Type Header auf text/html ohne charset Angabe.
>
> Das ist soweit richtig.
>
>> Gerade deshalb, damit man in einem HTML Document das einfach für den
>> Bowser über einen meat tag anpassen kann
>
> Probiers doch einfach aus. Manche Browser (Hier FF3.5) interessieren sich
> nicht für das was im Meta-Element als Zeichensatz gesetzt ist, solange
> dieses über http bzw. ssl angefordert wird. In diesem Fall erfolgt
> lediglich ein Fallback auf die für den Client konfigurierte
> Defaultkodierung.

Mein Shared Host liefert keine charset Angabe im Header, das Meta-Tag
gibt UTF-8 vor, der Browser accepted UTF-8 und ISO-8859-1 gleichermaßen.
Auch im Firefox wird UTF-8 korrekt angezeigt.

Stelle ich das Meta-Tag auf 8859-1 um, ist die Textausgabe - wie zu
erwarten - fehlerhaft. Ausgeliefert wird also immer UTF-8 und der
Browser (getestet auf FF, Chromium, Opera) interpretiert das Meta-Tag
sehr wohl.

Gregor


--
http://www.gregorkofler.com

Niels Braczek

unread,
Jan 27, 2010, 6:17:58 AM1/27/10
to
Ulf [Kado] Kadner schrieb:

> Hallo Claus Reibenstein, Du schriebst:
>> Ulf [Kado] Kadner schrieb:

> Reibenstein, 6, setzen! Bitte beließ Dich doch erstmal wenn Du etwas

> nicht weist. Mal abgesehen davon das Du hier neben Behauptungen auch
> Belege aufzeigen solltest.
>
>>> Du musst
>>> dazu, bevor Du irgendetwas an HTML ausgibst den Content-Type
>>> HTTP-Header mit entsprechender charsetangabe senden
>>> header('Content-Type: text/html; charset=utf-8');
>>
>> Nein, muss er nicht. Eins von beidem genügt.
>
> Märchenstunde ist nur Freitags

Die Interpretation des MetaTags sollte vom Webserver durchgeführt
werden. Allerdings lt. RfC AFAIR leider nur "sollte" und nicht "muss".

MfG
Niels

--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · e-Commerce · Joomla! Content Management |
------------------------------------------------------------------

Sam Kang

unread,
Jan 27, 2010, 6:29:11 AM1/27/10
to
Niels Braczek schrieb:

> Die Interpretation des MetaTags sollte vom Webserver durchgeführt
> werden. Allerdings lt. RfC AFAIR leider nur "sollte" und nicht "muss".

Der WWW Server soll den Outputdatenstrom als HTML Interpretieren und die
Metatags beachten?

Aha!

Wo stehen das den?

Torsten Zühlsdorff

unread,
Jan 27, 2010, 7:15:11 AM1/27/10
to
Ulf [Kado] Kadner schrieb:

>> Gerade deshalb, damit man in einem HTML Document das einfach für den
>> Bowser über einen meat tag anpassen kann
>
> Probiers doch einfach aus. Manche Browser (Hier FF3.5) interessieren sich
> nicht für das was im Meta-Element als Zeichensatz gesetzt ist, solange
> dieses über http bzw. ssl angefordert wird.

Dein Browser scheint kaputt. Mein FF3.5, FF3 und FF2 nutzen das im
Meta-Element angegebenen Encoding, obgleich der HTTP-Header gar nichts
dazu sagt.

> Es ist schlicht und ergreifend Pflicht an irgend einer Stelle (Server
> oder Script) die Codierung festzulegen, die als HTTP-Header gesendet
> werden soll.

Wenn es eine Pflicht ist, gibt es sicherlich einen RFC oder Ähnliches dazu?

Gruß,
Torsten
--
http://www.dddbl.de - ein Datenbank-Layer, der die Arbeit mit 8
verschiedenen Datenbanksystemen abstrahiert,
Queries von Applikationen trennt und automatisch die Query-Ergebnisse
auswerten kann.

Carsten Wiedmann

unread,
Jan 27, 2010, 7:58:18 AM1/27/10
to
Am 27.01.2010 12:29, schrieb Sam Kang:
> Niels Braczek schrieb:
>> Die Interpretation des MetaTags sollte vom Webserver durchgeführt
>> werden. Allerdings lt. RfC AFAIR leider nur "sollte" und nicht "muss".
>
> Aha!
>
> Wo stehen das den?

Im Allgemeinen
war "<META http-equiv ...>" mal dafür gedacht, dass der Webserver diese
auswertet, und daraus "richtige" Header macht (siehe HTML4.01 7.4.4). IN der
Praxis ist aber kaum ein Server konfiguriert das zu tun und die Browser
interpretieren die meisten/vielen Headerangaben dort (freiwillig) selbst.

Im Speziellen
was den "<META http-equiv="Content-Type" ..." angeht, muss ein Browser
diesen interpretieren, falls vorhanden und kein entspr. HTTP-Header gesetzt
wurde (siehe HTML4.01 5.2.2)

Gruß
Carsten

Claus Reibenstein

unread,
Jan 27, 2010, 9:45:29 AM1/27/10
to
Ulf [Kado] Kadner schrieb:

> Hallo Claus Reibenstein, Du schriebst:
>
>> Ulf [Kado] Kadner schrieb:
>>
>>> 2. Du solltest dem Webbrowser mitteilen das die Daten die er jetzt von
>>> Dir (z.B. als HTML) erhält in dieser Codierung (utf-8) kommen.
>>
>> Hat er.
>>
>>> Dazu reicht es nicht uns HTML eine meta-Angabe zu schreiben!
>>
>> Doch.
>
> Reibenstein, 6, setzen! Bitte beließ Dich doch erstmal wenn Du etwas
> nicht weist. Mal abgesehen davon das Du hier neben Behauptungen auch
> Belege aufzeigen solltest.

Das hat Carsten dankenswerterweise bereits übernommen, s.
<4b60385d$0$6562$9b4e...@newsspool4.arcor-online.net>.

Im Übrigen solltest Du Deine eigenen Ratschläge erst einmal selber
befolgen, bevor Du sie Anderen erteilst. Schließlich warst Du es, der
die Behauptung aufgestellt hat, <meta> würde nicht reichen. Wo sind
Deine Belege?

>>> Du musst
>>> dazu, bevor Du irgendetwas an HTML ausgibst den Content-Type
>>> HTTP-Header mit entsprechender charsetangabe senden
>>> header('Content-Type: text/html; charset=utf-8');

Steht wo?

>> Nein, muss er nicht. Eins von beidem genügt.
>
> Märchenstunde ist nur Freitags

Gilt natürlich nicht für Ulfs Märchenstunde ...

Gruß. Claus

0 new messages