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
> 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
> 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
> 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 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
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)
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
> 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
> 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.
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
> 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 |
------------------------------------------------------------------
Der WWW Server soll den Outputdatenstrom als HTML Interpretieren und die
Metatags beachten?
Aha!
Wo stehen das den?
>> 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.
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
> 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