Apostrophe in utf-8 in IE9

Thomasio

Erfahrenes Mitglied
Ich habe 2 Seiten, die sind nahezu identisch.

Beide haben im HTML Kopf

Code:
<?xml version="1.0"?>
<!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/html; charset=utf-8">
<title>MeineSeite</title>
</head>

Beide includen das selbe Script zur Verbindung mit MySql, da steht drin:

Code:
mysql_connect("***","***","***");
mysql_query("SET names 'utf8'");
mysql_select_db("***");

Beide verwenden die selbe Abfrage um Daten aus der DB zu lesen

Code:
$abfrage = mysql_query("SELECT `data` FROM `tablename`");
while($row = mysql_fetch_object($abfrage))
{
$data[] = $row->data;
}

Dann gebe ich das ganze im body der beiden Seiten aus, einziger Unterschied, einmal steht der <p> Paragraph in einem Table, in der anderen Version ohne Table, einmal mit Hintergrund, die andere Version ohne:

Code:
print <<<END
<body>
<p>
$data[0]
</p>
</body>
</html>
END;

Code:
print <<<END
<body bgcolor="#000000" text="#ffffff">
<table width="100%" border="0" align="left">
<tr><td width="100%" align="center" valign="top">
<p>
$data[0]
</p>
</td></tr>
</table>
</body>
</html>
END;

Mal angenommen in $data[0] steht drin: "I don´t speak english"

dann bekomme ich es in der Version mit Table korrekt angezeigt, aber in der Version ohne Table wird aus dem Apostroph in "don´t" ein Hyroglyph und das ganze NUR in IE9 unter Win7, IE8 unter XP und FireFox zeigen beide Versionen korrekt an.

Was soll das, bzw. wie behebe ich das?
 
Wahlweise könntest du auch prüfen, ob die PHP-Scripts selbst im UNICODE-Format abgespeichert sind.

EDIT: Da hab ich wohl eine Zeile übersehen.

EDIT2: Du könntest zusätzlich noch den HTTP-Header für UTF-8 senden:
PHP:
header( 'Content-Type: text/html; charset=utf-8' );
 
Ja OK, das geht immer, aber wozu mache ich den ganzen Umstand mit utf-8, wenn ich dann doch sämtliche Sonderzeichen in Codes umsetzen muss?
Und vor allem, wieso macht das nur der IE9 falsch?
 
Ähem, JETZT wirds witzig.
Ich habe gerade den header() eingefügt, ausprobiert, geht, wollte schon das grosse Danke schreiben, dann habe ich nur zur Gegenprobe den header() wieder entfernt, und er zeigt es IMMER NOCH korrekt an.
Was soll das jetzt?
Ich kann den Fehler nicht mehr reproduzieren, sollte ja eigentlich froh sein, aber verstehen würde ich das gerne.

Codierung zeigt er: Unicode (UTF-8)
 
Zuletzt bearbeitet von einem Moderator:
Einen Dank an saftmeister, in der Idee mit der Codierungs-Anzeige liegt die Lösung.
Stelle ich die auf "Automatische Auswahl", macht IE9 den Fehler.
Stelle ich das wieder auf UTF-8, macht es auch IE9 richtig.
Obendrauf, einmal richtig eingestellt, merkt der IE9 sich das sogar und zeigt es ab sofort richtig an.
Besuche ich aber zwischendrin eine andere Seite, mit anderer Codierung, ist es wieder falsch.

Das Problem ist jetzt, wie stelle ich sicher, dass das bei den Usern richtig ankommt?
Ich kann ja wohl schlecht auf sämtlichen Seiten einen Hinweis machen, dass die Automatik vom IE9 nicht geht und der User manuell UTF-8 einstellen soll.
 
Hmm ... da du uns leider kein Beispiel gepostet hast muss ich mal als IE9-User was einwerfen :
Das der IE eine Automatik hat um das richtige Encoding auszuwählen weis ich ...
Das der IE eine Möglichkeit hat diese manuell zu überschreiben wusste ich noch nicht ... ist mir aber auch egal ...
Die Automatik lässt sich über den HTTP-Header steuern ... von daher : füge einfach den Header ein ... fertig.

Was der Unterschied von IE8 zu IE9 ist ? ... Keine Ahnung ... frag mal Bill Gates ...
 
Habe ich das richtig verstanden?

Der PHP-Header

header( 'Content-Type: text/html; charset=utf-8' );

ist was anderes als die HTML-Zeile

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

Sprich mit dem Header sollte es immer gehen, und die HTML-Zeile kann ich dann sogar ganz weglassen?
 
Zurück