UTF8 Darstellungsfehler / IExplorer

Begonnen von mrmeissner, 13 August 2008, 19:40:27

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

mrmeissner

Hallo,

ich habe das Phänomen, dass der Internetexplorer Probleme mit der Darstellung hat und automatisch auf UTF8 umschaltet d.h. Umlaute falsch anzeigt und Zeilen verschluckt bzw. nicht anzeigt.
Test-Homepage: http://www.erdnatter.de

Wenn ich als Mitglied oder Admin auf der Seite angemeldet bin passiert dies nicht d.h. die Texte werden korrekt angezeigt.

Als Gast werden die Texte nur teilweise richtig angezeigt, bei Aktualisierung der Anzeige oder klicken einer bestimmten Reihenfolge (z.B. oben auf den Navibutton "Startseite") dann auf einmal als UTF-Codierung.  :gruebel:

Die Datenbank ist MYSQL 5.32 und läuft unter UTF8. Ich habe in der Mainfile.php nach dem Verbingungsaufbau den charset auf latin1 gestellt

/**
* Datenbankverbindung herstellen
*/
require_once(PMX_SYSTEM_DIR . '/sql_layer.php');
$dbi = sql_connect($GLOBALS['dbhost'], $GLOBALS['dbuname'], $GLOBALS['dbpass']);
mysql_query('SET NAMES latin1;');
mysql_query('SET CHARACTER SET latin1;');


if (empty($dbi)) {


Und in Header.php den Charset ebenfalls geändert:

$GLOBALS['header_is_shown'] = true;
$GLOBALS['header'] = 1;
header("Content-type: text/html; charset=iso-8859-1");
/**
* nur fuer nuke-Module noch drin!
*/


Überings frag ich mich, warum die standartmäßige Charseteinstellung in der Header.php (<meta http-equiv="Content-Type" content="text/html; charset=<?php echo _CHARSET ?>">) bei mir ignoriert wird. Wenn ich mit den Quelltext der falsch Angezeiten Seiten Anschaue steht dort explizit: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Und nochmals, der Fehler tritt nur als Gast auf. Wird dort eine andere Verbindung aufgebaut als bei Usern  :quest

Wo liegt mein Denkfehler?

mrmeissner

Problem gelöst!

Da mich der SCH**** drei Tage gekostet hat poste ich hier mal die Lösung und erspar dem einen oder anderen damit den Stress....  ;)

Aktuelle wird bei Standardinstallation von MYSQL5 und Apache Webserver UTF-8 automatisch als Default-Charset gesetzt. Die Probleme beginnen damit bereits beim Datenbankumzug, vor allem mit MYSQL-Dump in Kombinaton mit MYSQL 3. Ich empfehle die Daten im UTF-8 Format zu exortieren und in MYSQL5 auch als UTF-8 zu importieren, Will man jedoch alles, sprich auch die Files, auf UTF-8 stellen bekommt man Probleme mit den vielen language-Files. Pragmamx ist derzeit noch nicht UTF-8 kompatibel.

Will man trotzdem UTF-8 nutzen müssen dann mittels Editor alle Dateien mit Textinhalt (z.b. Languagefiles) in UTF-8 Format umgewandelt werden. Alternativ alle Umlaute mit Suchen/Ersetzen umkodiert werden. Was in beiden Fällen je nach Umfang der Seite ein Haufen arbei ist. Ich habe mich daher entschieden, die Seite als latin1 laufen zu lassen, obwohl die Daten in der DB als UTF-8 gespeichert sind. Dazu muss man dem SQL-Server nur sagen, das er umformatieren soll beim ausliefern der Daten und dem Browser mitteilen, in welchem Format er die Daten anzuzeigen hat.

Problem hierbei ist jedoch:
Der Internetexplorer ignoriert Header-Informationen wenn der Apache-Server HTTP-Defaults mitsendet. Daher werden die Angaben in der Header.php vom IE nicht beachtet bzw. ignoriert. Abhilfe schafft man sich, wenn man per .htacess dem Server mitteilt, welches Default-Charset er an den Browser senden soll.

Kleines Workaround

1. In die .htaccess einfügen:

AddDefaultCharset On (bei latin 1) bzw.  AddDefaultCharset UTF-8 (bei UTF-8)

Desweiteren sollte man auch den Charset in den Stylesheets einfügen:

2. In style.css einfügen

@charset "ISO-8859-1";
bzw.  @charset "UTF-8";


3. Dem SQL-Server den Charset mitteilen, dazu in der mainfile.php einfügen


......
$dbi = sql_connect($GLOBALS['dbhost'], $GLOBALS['dbuname'], $GLOBALS['dbpass'], $GLOBALS['usecharset']);
mysql_query('SET NAMES latin1;');
mysql_query('SET CHARACTER SET latin1;');
......


4. Die Variable für $GLOBALS['usecharset']); habe ich in der config.php angefügt:


......
$mxConf['prefix']      = 'pra';
$mxConf['user_prefix'] = 'pra';
$mxConf['usecharset']  = 'Charset=latin1';
.....