• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Merkwürdiges Umlaut problem

Don83

Mitglied
Hallo,
das Problem habe ich nun schon eine weile und finde keine Lösung.
Ich habe eine webseite.
Umlaute werden eigenltich korrekt formatiert:
Code:
echo htmlentities("Die Welt ist groß und liebe lauert überall");
Wird zum Beispiel richtig angezeigt.

Allerdings - wenn ich aus der Datenbank lese werden die sonderzeichen nicht richtig angezeigt, trotz htmlentities(DB_eintrag).

Hier mal ein screenshot. Vielleicht kennt jemand das Problem.
Es handelt sich um eine mysql datenbank.
 

Anhänge

  • umlaute.gif
    umlaute.gif
    21,7 KB · Aufrufe: 14
Beim Auslesen aus der Datenbank musst Du berücksichtigen
- welchen Zeichensatz die ausgelesene Datenbankspalte hat
- welchen Zeichensatz die Datenbank verwendet
- mit welchem Zeichensatz die Datenbankverbindung initialisiert wird

Ich vermute einfach mal, dass diese Zeichensatz-"Kombination" deiner Datenbank nicht mit der deiner Webseite übereinstimmt. Mit "htmlentities" werden zudem nur Umlaute und Sonderzeichen durch die HTML-Pendants ersetzt - das geht natürlich nicht, wenn Du in dem Text ein utf8-Zeichen hast, wie es aus der Datenbank kommen könnte.
 
schau dir vielleicht auch mal die Funktionen utf8_encode() und utf8_decode() an sowie die HTML-DOC-Typs.

Damit kannst du solchen Fehlern oft entgegenwirken.
Ich hab auch schon erlebt, das wenn die PHP-Datei selber nicht in UTF8 gespeichert wurde es zu solchen Fehlern gekommen ist. Also da auch nochmal schauen.
 
Beim Auslesen aus der Datenbank musst Du berücksichtigen
- welchen Zeichensatz die ausgelesene Datenbankspalte hat
- welchen Zeichensatz die Datenbank verwendet
- mit welchem Zeichensatz die Datenbankverbindung initialisiert wird

Ich vermute einfach mal, dass diese Zeichensatz-"Kombination" deiner Datenbank nicht mit der deiner Webseite übereinstimmt. Mit "htmlentities" werden zudem nur Umlaute und Sonderzeichen durch die HTML-Pendants ersetzt - das geht natürlich nicht, wenn Du in dem Text ein utf8-Zeichen hast, wie es aus der Datenbank kommen könnte.
Hmhm, ich bin leider was das angeht in mysql nicht so bewandert.
Wie kann ich denn den Zeichensat der Datanbankspalte, Datanbank und Datenbankinitialisierung überprüfen?
schau dir vielleicht auch mal die Funktionen utf8_encode() und utf8_decode() an sowie die HTML-DOC-Typs.

Damit kannst du solchen Fehlern oft entgegenwirken.
Ich hab auch schon erlebt, das wenn die PHP-Datei selber nicht in UTF8 gespeichert wurde es zu solchen Fehlern gekommen ist. Also da auch nochmal schauen.
utf8_decode habe ich mal verwendet. Funktioniert besser - aber auch probleme.
Beim Beispiel "Die Welt ist groß und Zufall lauter überall" werden die umlaute korrekt übersetzt, aber das scharfe ß wird nicht ordentlich umgewandelt.
Die php file ist übrigens eine selbstgeschrieben joomla file. Ich weis nicht ob das eve. an joomla liegen könnte.
Aber denke das problem liegt eher an der Datenbank.
 
Ich wollte jetzt noch ein paar infos nachreichen.
Also die Tabelle um die es geht sieht wie folgend aus:
Code:
CREATE TABLE jos_movies(
name varchar(200),
director varchar(200),
actor varchar(200),
country varchar(200),
length integer,
fsk varchar(20),
year timestamp,
start timestamp,
distributor varchar(200),
genre varchar(200),
watch varchar(200),
predicate varchar(200),
youth boolean,
url varchar(1000),
id integer,
content varchar(5000))
CHARACTER SET utf8;
;
Ich habe den character Set auf utf8 gesetzt.
In der tabelle alles normal - auf der webseite die selben fehler wie beschrieben.
Die Daten stammen aus einer psql Datenbank die über ein Java programm eingespielt werden. Also ziemlich kompliziert. Kann der Fehler auch aus einer der Vorstufen stammen? Wobei die Zeichen ja wie gesagt, in der mysql datenbank richtig angezeigt werden.
 
Ja, das Problem kann auch durch das "Kopieren" von Daten aus einer Datenbank in eine andere entstehen. Man muss auch dabei immer haargenau auf den Zeichensatz achten. Du hast auf jeden Fall eine UTF-8-Datenbank, wenn die Quelldaten aus der Originaldatenbank 1:1 übernommen wurden müsste diese Originaldatenbank auch utf-8 sein. Wenn nicht müsstest Du den Import neu durchführen und ggfs. den Zeichensatz aller Texte anpassen. Wenn Du dich damit bisher nicht beschäftigt hast wäre es jetzt wohl an der Zeit.
 
Also habe das Problem nun doch noch ein wenig eingeschränkt.
Es MUSS am server oder der mysql DB liegen.
Java und PSQL sind unschuldig.

Irgendwie komme ich mit der mysql doku nicht zurande.
Mittels show charset bekomme ich alle charsets mit deren defualt collations.
Ich weiß alerdings nicht was jetzt das DB genutzte -standard charset und was die standard collation ist.
Kennt da jemand vielleicht den Befehl? :oops:
 
Code:
$connecting = @mysql_connect('localhost','user','pwd');
if(!$connecting) {
 echo "<p>Es konnte keine Verbindung zum Datenbankserver hergestellt werden!</p>";
 exit;
}
$database = mysql_select_db('database',$connecting);
if(!$database) {
 echo "<p>Es konnte keine Verbindung zur Datenbank hergestellt werden!</p>";
 exit;
}
[B]mysql_query("SET NAMES 'utf8'");[/B]
Das sollte dir weiterhelfen. Der Zeichensatz muss eventuell auf den von dir verwendeten umgestellt werden. In Firefox kannst du das ganz einfach herausfinden. Rechtsklick → Seiteninformationen.
 
Zurück
Oben