PHP / AJAX Umlaute in Texten
Günni
- php
Hallo selfhtml Gemeine.
ich stehe ich vor einem unerklärlichem Problem... ( welches ich natürlich schon gegooget habe, aber dennoch nicht verstehe)
Das problem nennt sich Umlaute Ä Ö Ü..
1: Ich habe eine MySQL DB (utf8_general_ci) in welcher alle texte also auch Umlaute gespeichert sind. Die Umlaute sind direkt im Text und nicht als htmlentrie.
2: Auf meiner index.php habe ich den Meta-Content wie folgt angegeben:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
auf dieser Seite werden nun die Umlaute korekt dargestellt. Stelle ich hier UTF8 ein werden sie als unleserliche SOnderzeichen dargestellt. Also bleibe ich hier bei ISO-8859-1.
3: Auf der Index.php befindet sich eine versteckte DIV welche als Overlay eingesetzt wird. Sprich man Klickt wo drauf und das ding wird sichtbar :-)
diese DIV fülle ich mittels AJAX welches Daten aus folgender PHP Datei Läd:
<?
include("../db_conn.php");
$m_id = $_GET[m_id];
if(isset($m_id)) {
$abfrage = "SELECT id,datum,title,genere,image,trailer,text FROM kino WHERE id = '$m_id'";
$erg = mysql_query($abfrage);
list($id,$datum,$title,$genere,$image,$trailer,$text) = mysql_fetch_row($erg);
$datum = date('d.m.y',strtotime("$datum"));
echo "$id#$datum#$title#$genere#$image#$trailer#$text";
}
?>
Nun sind aber die ausgelesenen Daten wieder mit unleserlichen Sonderzeichen gespickt obwohl sich die DIV auf der Index mit ISO-8859-1 befindet ??
Hallo,
Hallo selfhtml Gemeine.
ja, ein paar Gemeine gibt's hier möglicherweise auch ...
1: Ich habe eine MySQL DB (utf8_general_ci) in welcher alle texte also auch Umlaute gespeichert sind. Die Umlaute sind direkt im Text und nicht als htmlentrie.
Sind die Texte in der DB *wirklich* in UTF-8 gespeichert, oder steht das nur auf dem Etikett der Schublade?
2: Auf meiner index.php habe ich den Meta-Content wie folgt angegeben:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Ist das HTML-Dokument *wirklich* in ISO-8859-1 codiert oder steht das nur im Falz?
Macht der Server im HTTP-Header eine anderslautende Angabe, oder vielleicht gar keine?
auf dieser Seite werden nun die Umlaute korekt dargestellt. Stelle ich hier UTF8 ein werden sie als unleserliche SOnderzeichen dargestellt. Also bleibe ich hier bei ISO-8859-1.
Okay, also offensichtlich keine Codierungsangabe im Header.
<?
include("../db_conn.php");
$m_id = $_GET[m_id];if(isset($m_id)) {
$abfrage = "SELECT id,datum,title,genere,image,trailer,text FROM kino WHERE id = '$m_id'";
$erg = mysql_query($abfrage);
list($id,$datum,$title,$genere,$image,$trailer,$text) = mysql_fetch_row($erg);
$datum = date('d.m.y',strtotime("$datum"));
echo "$id#$datum#$title#$genere#$image#$trailer#$text";
}
?>
In welcher Codierung tauschen die Datenbank und dein PHP-Script untereinander Daten aus? Welche Codierung gibt das Script im Header dem Client (Browser) gegenüber an?
> Nun sind aber die ausgelesenen Daten wieder mit unleserlichen Sonderzeichen gespickt obwohl sich die DIV auf der Index mit ISO-8859-1 befindet ??
Dann stimmt wohl an irgendeiner Stelle des Übertragungswegs die Codierung nicht.
Generell gilt:
\* Unterscheide in Gedanken zwischen der Codierung, die du \*tatsächlich\* verwendest, und der,
die an den diversen Schnittstellen \*angegeben\* wird (sollten natürlich gleich sein).
\* Beachte, dass möglichst an allen Stellen im Übertragungsweg dieselbe Codierung verwendet
wird, und dass diese Codierung auch korrekt angegeben wird.
In deinem Fall sind zu betrachten:
o die Datenbankinhalte (Felder)
o die Codierungsangabe der Datenbankfelder
o die Codierungsangabe der Verbindung von PHP zu mySQL
o die Codierung des PHP-Scripts selbst, wenn Stringkonstanten darin vorkommen
o die Codierung statischer HTML-Dokumente oder Dokumentteile
o die Codierungsangabe im HTTP-Header
o die Codierungsangabe im meta-Element (als Fallback)
Du verwendest offensichtlich einen Mix aus UTF-8 und ISO-8859-1. Das \*kann\* man tun, wenn man sehr genau weiß, was man tut - empfehlenswert ist es nicht. Um möglichst viele unterschiedliche Zeichen darstellen zu können, empfiehlt sich UTF-8, und zwar konsequent.
So long,
Martin
--
Lebensmotto der Egoisten:
Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
Danke für deine ausführliche Antwort. Könntest du mir sagen wie ich die einzelnen codierungen anzeigen lassen / ändern kann ?
wennn ich mir die Seiteneigenschaften im Firefox anschaue steht dort:
Kodierung: ISO-8859-1
und in meiner MySQL steht bei den spalten auch über all utf8_general_ci
Danke
Hallo,
Könntest du mir sagen wie ich die einzelnen codierungen anzeigen lassen / ändern kann ?
wennn ich mir die Seiteneigenschaften im Firefox anschaue steht dort:
Kodierung: ISO-8859-1
das ist der Punkt, wo ich an deiner Stelle anfangen würde:
Das Dokument in UTF-8 umcodieren, dann die Angabe im meta-Element anpassen, dann weitersehen.
und in meiner MySQL steht bei den spalten auch über all utf8_general_ci
Eine gute Voraussetzung. Ob das alles stimmt, sehen wir später.
Ciao,
Martin
so ich habe jetzt in der Index folgendes:
ganz oben:
<?
header("Content-Type: text/html; charset=utf-8");
?>
und dann der content:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
jetzt funktionieren aber die umlaute in der index nicht mehr.
Hi,
so ich habe jetzt in der Index folgendes:
ganz oben:
<?
header("Content-Type: text/html; charset=utf-8");
?>und dann der content:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
jetzt funktionieren aber die umlaute in der index nicht mehr.
Dann hast du „die index“ nicht korrekt in UTF-8 abgespeichert ...
MfG ChrisB
Wie sollte ich diese als UTF-8 speichern ? Verwende PROTON.
Hi,
Wie sollte ich diese als UTF-8 speichern ?
Durch Auswählen der entsprechenden Option in einem vernünftigen Editor.
Verwende PROTON.
Tja, der ist leider so weit ich weiß in der Hinsicht kein solcher.
MfG ChrisB
Gibt es einen guten PHP editor ? mach normal alles mit Notepad oder Proton. Danke
Hi,
Gibt es einen guten PHP editor ? mach normal alles mit Notepad oder Proton.
NotePad++
MfG ChrisB
habe jetzt alle php Dateien mit Notepad++ als UTF-8 gespeichert.. geht dennoch nicht.
Lösung: mysql_set_charset('utf8');
So... hier die Lösung: geht jetzt wunderbar ! Danke für die Hilfe
-----------------------------
mysql_set_charset('utf8');
-----------------------------
Hallo,
so ich habe jetzt in der Index folgendes:
ganz oben:
<?
header("Content-Type: text/html; charset=utf-8");
?>und dann der content:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
ja, gut - und hast du auch die Codierung des Dokuments diesen Angaben entsprechend geändert?
jetzt funktionieren aber die umlaute in der index nicht mehr.
Anscheinend nicht. Nein, wenn man auf eine Packung Kekse nur einfach "Erdbeerjoghurt" draufschreibt, ist dadurch noch kein Erdbeerjoghurt drin.
Gute Nacht,
Martin