Probleme mit mehrsprachiger Website
Probleme mit mehrsprachiger Website
am 15.07.2006 12:07:27 von Marcel Polty
Hallo,
ich habe das Problem auch schon in 2 andere Gruppen diskutiert, bin
nun aber zu der Überzeugung gekommen das es ein Daten und
Datenbankproblem ist.
Es würde mich sehr freuen wenn mir hier jemand auf die Sprünge helfen
könnte.
Es geht darum, das ich ein Website mehrsprachig mache und die
einzelnen Sprachen in einer MySQL Datenbank speichere. Die deutschen
und englische Zeichen machen dabei keine Probleme. Ganz anders sieht
es mit der tschechischen Sprache aus.
Ich zeige das mal an einem Beispiel, leider wird auch hier in der
Newsgrop das tschechische Wort nicht vollkommen korrekt dargestellt.
Aber es wird gehen:
Tschechisches Wort: ¦ír(ka
Das obige Wort eingefügt in MySQL4 sieht dann so aus: ¦ířka
Das obige Wort eingefügt in MySQL5 mit utf-8 Kollation sieht aus wie
das Original.
Wenn ich ¦ířka aus der MySQL4 Datenbank nehme und in MySQL5
einfüge, dann sieht es dort genau so aus wie in MySQL4 und auf der
Website mit iso8859-1 wird es auch korrekt ausgegeben.
Ich habe versucht das ganze darzustellen:
http://www.s128548219.online.de/script/czech.php
Mit MySQL5 bekomme ich die Sonderzeichen also weder mit ISO8859-1 noch
mit utf-8 dargestellt.
Bei MySQL4 geht es zumindest mit der ISO8559-1 Kodierung.
Wegen der Zukunfssicherheit und auch wegen möglicher Probleme mit
weiteren Sprachen möchte ich das ganze aber lieber mit MySQL 5 und
utf-8 machen. Nur das bekomme ich einfach nicht hin.
Kann mir jemand sagen was ich falsch mache bzw. was ich anders machen
muss?
Vielen Dank
Gruß Marcel
Re: Probleme mit mehrsprachiger Website
am 15.07.2006 12:33:05 von Johannes Vogel
Hi Marcel
Marcel Polty wrote:
> Es geht darum, das ich ein Website mehrsprachig mache und die
> einzelnen Sprachen in einer MySQL Datenbank speichere. Die deutschen
> und englische Zeichen machen dabei keine Probleme. Ganz anders sieht
> es mit der tschechischen Sprache aus.
>
> Ich habe versucht das ganze darzustellen:
> http://www.s128548219.online.de/script/czech.php
>
> Mit MySQL5 bekomme ich die Sonderzeichen also weder mit ISO8859-1 noch
> mit utf-8 dargestellt.
> Bei MySQL4 geht es zumindest mit der ISO8559-1 Kodierung.
http://www.s128548219.online.de/script/czech5.php?flag=100
--> untere Tabelle sieht aus meiner Sicht in Firefox völlig korrekt aus.
Was hindert dich daran, es so zu machen?
HTH, Johannes
Re: Probleme mit mehrsprachiger Website
am 15.07.2006 13:24:39 von Marcel Polty
Hallo Johannes,
Johannes Vogel schrieb:
>http://www.s128548219.online.de/script/czech5.php?flag=100
>--> untere Tabelle sieht aus meiner Sicht in Firefox völlig korrekt aus.
Die beiden Tabellen sind nur Screenshots von PhpMyAdmin, um
darzustellen wie in der jeweiligen Version von MySQL die Daten
dargestellt werden.
>Was hindert dich daran, es so zu machen?
Oben das mit der Überschrift "MySQLX Daten in xxxx:" das sind Daten
die direkt aus der Datenbank ausgelesen werden.
Und da sieht man das sie in MySQL4 anders dargestellt werden als bei
MySQL5.
In MySQL 5 werden sie bei keiner Kodierung richtig dargestellt bei
MySQL4 wenigstens in ISO8559-1.
Ich möchte Sie aber in MySQL 5 abspeichern und mögichst mit utf-8
kodieren.
Die Frage ist, wie das geht?
Vielen Dank
Gruß Marcel
Re: Probleme mit mehrsprachiger Website
am 15.07.2006 13:51:21 von Carsten Wiedmann
Marcel Polty schrieb:
> Ich möchte Sie aber in MySQL 5 abspeichern und mögichst mit utf-8
> kodieren.
>
> Die Frage ist, wie das geht?
Nach dem mysql_connect machst du als erstes ein Query mit:
| SET NAMES 'utf8'
Die Tabellen sollten als "CHARACTER SET" dann auch "utf8" im "CREATE TABLE"
haben.
Damit kannst du dann deine UTF-8 Strings mit einem INSERT in der DB ablegen
und erhälst auch wieder UTF-8 Strings beim SELECT.
BTW:
> Wenn ich Sířka aus der MySQL4 Datenbank nehme und in MySQL5
> einfüge, dann sieht es dort genau so aus wie in MySQL4 und auf der
> Website mit iso8859-1 wird es auch korrekt ausgegeben.
Ein "ř" ist natürlich ein kein Zeichen in UTF-8 Kodierung, sondern ein
HTML-Entity das dieses Zeichen dann darstellt. Ich hoffe du speicherst nicht
diese Entities in die DB?
Gruß
Carsten
Re: Probleme mit mehrsprachiger Website
am 15.07.2006 14:47:27 von Marcel Polty
Hallo,
vielen Dank Carsten!
"Carsten Wiedmann" schrieb:
>Nach dem mysql_connect machst du als erstes ein Query mit:
>| SET NAMES 'utf8'
>Die Tabellen sollten als "CHARACTER SET" dann auch "utf8" im "CREATE TABLE"
>haben.
>
>Damit kannst du dann deine UTF-8 Strings mit einem INSERT in der DB ablegen
>und erhälst auch wieder UTF-8 Strings beim SELECT.
Super, das werde ich dann gleich mal ausprobieren und bescheid sagen
was daraus geworden ist.
Das Problem ist nur, das ich die Daten in einer Excel Tabelle habe und
diese bisher nur über copy & paste in die Datenbank eingefügt habe. In
Excel werden die tschechischen Worte korrekt dargestellt, aber werden
die mit Copy&Paste auch korrekt in die Datenbank übertragen?
(Importieren bekomme ich zur Zeit noch nicht hin, weil wenn ich die
Excel-Tabelle im .csv Format speichern tue, dann sind die
Sonderzeichen ebenfalls verschwunden.)
Aber wenn die Daten mit Copy&Paste korrekt übertragen werden, dann ist
es nicht das Problem das ich die Daten nicht importieren kann. Es sind
nicht soo viele Daten und es wird auch nur ein einziges Mal gemacht.
Ich bin also zur Zeit nicht 100%ig sicher das die Daten in der
Datenbank auch utf-8 kodiert sind. Das ist zwar traurig und nicht
schön, es ist aber nun halt mal so.
>BTW:
>> Wenn ich Sířka aus der MySQL4 Datenbank nehme und in MySQL5
>> einfüge, dann sieht es dort genau so aus wie in MySQL4 und auf der
>> Website mit iso8859-1 wird es auch korrekt ausgegeben.
>
>Ein "ř" ist natürlich ein kein Zeichen in UTF-8 Kodierung, sondern ein
>HTML-Entity das dieses Zeichen dann darstellt. Ich hoffe du speicherst nicht
>diese Entities in die DB?
*Ich* lege sie nicht so ab, das macht MySQL4 beim einfügen über
Copy&Paste oder auch beim Import selbstständig.
Aber das ist bis jetzt auch der einzigste Weg wie es funktioniert.
Bis dann...
Gruß Marcel
Re: Probleme mit mehrsprachiger Website
am 15.07.2006 16:27:41 von Marcel Polty
Hallo Carsten,
das war der richtige Tipp!!!
"Carsten Wiedmann" schrieb:
>Nach dem mysql_connect machst du als erstes ein Query mit:
>| SET NAMES 'utf8'
>Die Tabellen sollten als "CHARACTER SET" dann auch "utf8" im "CREATE TABLE"
>haben.
Es funktioniert jetzt!
http://www.s128548219.online.de/script/czech5.php?flag=0
Den allerbesten Dank an Dich.
Bis dann...
Gruß Marcel
Re: Probleme mit mehrsprachiger Website
am 15.07.2006 21:43:28 von Helmut Chang
Marcel Polty schrieb:
>> Ein "ř" ist natürlich ein kein Zeichen in UTF-8 Kodierung, sondern ein
>> HTML-Entity das dieses Zeichen dann darstellt. Ich hoffe du speicherst nicht
>> diese Entities in die DB?
>
> *Ich* lege sie nicht so ab, das macht MySQL4 beim einfügen über
> Copy&Paste oder auch beim Import selbstständig.
Sicher nicht.
gruss, heli
Re: Probleme mit mehrsprachiger Website
am 09.08.2006 19:08:01 von Marcel Polty
Hallo,
die Sache ist doch noch nicht abgeschlossen.
Es gibt noch ein Problem bei der Suche!
Wenn ich nach einem tschechischen Begriff suche dann wird nichts
gefunden.
Ich habe es folgendermassen probiert:
opendb(...)
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
if (!$result = @mysql_db_query($dbname,"select de, cz from rs_lang
where cz like '$cz_txt'")) {$err=mysql_error(); return(3);}
while($row = mysql_fetch_array($result))
{...)
Woran kann das liegen?
Weder die Google-Suche noch die Recherche in Handbüchern usw. haben
mich weitergebracht.
Dürfte ich noch einmal um eure Unterstützung bitten?
Vielen Dank
Gruß Marcel
Re: Probleme mit mehrsprachiger Website
am 09.08.2006 21:09:40 von Thomas Rachel
Marcel Polty wrote:
> Wenn ich nach einem tschechischen Begriff suche dann wird nichts
> gefunden.
>
> Ich habe es folgendermassen probiert:
>
> opendb(...)
> mysql_query("SET NAMES 'utf8'");
> mysql_query("SET CHARACTER SET 'utf8'");
> if (!$result = @mysql_db_query($dbname,"select de, cz from rs_lang
> where cz like '$cz_txt'")) {$err=mysql_error(); return(3);}
> while($row = mysql_fetch_array($result))
> {...)
>
> Woran kann das liegen?
Da kann ich Dir leider nicht weiterhelfen, aber vielleicht gibt es irgendein
Problem mit dem Query.
1. Hast Du $cz_txt durch mysql_real_escape_string() laufen lassen?
2. Warum wertest Du $err nicht aus, bevor Du return(3) machst? Vielleicht
steht dort ja Deine Antwort drin...
Thoma
--
Und wenn ich die jungen Leute betrunken aus dem Wirtshaus wanken sehe,
möchte ich ihnen zurufen: Ihr seid auf dem falschen Weg! Kehret um, kehret
um!
Re: Probleme mit mehrsprachiger Website
am 10.08.2006 04:49:00 von Marcel Polty
Hallo,
Thomas Rachel schrieb:
>1. Hast Du $cz_txt durch mysql_real_escape_string() laufen lassen?
Jetzt Ja, das hat aber hier keine Änderung gebracht.
>2. Warum wertest Du $err nicht aus, bevor Du return(3) machst? Vielleicht
>steht dort ja Deine Antwort drin...
Der gepostete Code steht in einer Function bei der $err als Parameter
übergeben wird und nach dem Aufruf abgefragt und bearbeitet wird.
Daran sollte es nicht liegen, weil mit englisch und deutsch
funktioniert ja alles.
Vielen Dank Thomas!
Gruß Marcel
Re: Probleme mit mehrsprachiger Website
am 10.08.2006 05:55:52 von Carsten Wiedmann
Marcel Polty schrieb:
> Wenn ich nach einem tschechischen Begriff suche dann wird nichts
> gefunden.
>
> Ich habe es folgendermassen probiert:
>
> opendb(...)
> mysql_query("SET NAMES 'utf8'");
> mysql_query("SET CHARACTER SET 'utf8'");
> if (!$result = @mysql_db_query($dbname,"select de, cz from rs_lang
> where cz like '$cz_txt'")) {$err=mysql_error(); return(3);}
> while($row = mysql_fetch_array($result))
> {...)
>
> Woran kann das liegen?
Wohl an dem, was du uns bisher IMHO noch nicht gesagt hast ;-)
In welcher Codierung kommen denn die Daten aus dem Browser an? Also das was
in $cz_txt ist. Welches Character Set hat die Tabelle `rs_lang`und die DB
$dbname? Ich hoffe mal, dass die Daten auch wirklich im gewünschten
Zeichensatz in der DB stehen, und nicht beim Ex/Import etwas durcheinander
geraten sind...
Evtl. kann mich ja mal jemand dazu aufklären:
IMHO finde ich es ziemlich kontraproduktiv, erst SET NAMES und danach SET
CHARACTER SET zu benutzen. Das kann doch durchaus einen unerwünschten
Nebeneffekt haben?
Gruß
Carsten