UTF-8 Datenbankverbindung

Jede Art von Fehler die REDAXO betreffen.

UTF-8 Datenbankverbindung

Beitragvon Xong » 5. Jun 2009, 09:37

Ich habe eben schon darüber geschrieben: http://forum.redaxo.de/sutra68922.html#68922

Allerdings erscheint mir der Bug mittelschwer bis schwer, da sämtliche Daten falsch in der Datenbank landen.

In der Datei class.rex_sql.inc.php findet man ab Zeile 50 folgenden Code:
Code: Alles auswählen
      // connection auf UTF8 trimmen
      if (rex_lang_is_utf8())
      {
        if(function_exists('mysql_set_charset') AND version_compare($REX['MYSQL_VERSION'], '5.0.7', '>='))
          mysql_set_charset('utf8', $this->identifier);
        else
          $this->setQuery('SET NAMES utf8');
      }

Die Kommentar-Striche vor $this->setQuery('SET NAMES utf8'); müssen also entfernt werden.

Wenn die DB-Daten UTF-8-kodiert sind, werden sie sonst nicht richtig übernommen. Warum diese Zeile auskommentiert ist, ist mir ein Rätsel.

Vielleicht könnte man das in der nächsten Version anpassen.
Zuletzt geändert von Xong am 24. Mär 2010, 23:23, insgesamt 2-mal geändert.
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: UTF-8 Datenbankverbindung

Beitragvon Koala » 19. Jun 2009, 18:04

Xong hat geschrieben:Warum diese Zeile auskommentiert ist, ist mir ein Rätsel.
Vielleicht weil das damit gar nicht funktioniert?
Damit das funktioniert, schreibe man nach der angegebenen Zeile folgendes:
Code: Alles auswählen
mysql_set_charset('utf8');

Dies setzt PHP >= 5.2.3 und MySQL >= 5.0.7 vorraus!

Man kann die Zeile mit dem "SET NAMES" drin lassen. Evtl. wird es ja doch irgendwann mal von mysql_query unterstüzt?
.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1528
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Re: UTF-8 Datenbankverbindung

Beitragvon Xong » 20. Jun 2009, 10:07

Hi Koala!
Koala hat geschrieben:
Xong hat geschrieben:Warum diese Zeile auskommentiert ist, ist mir ein Rätsel.
Vielleicht weil das damit gar nicht funktioniert?

Wieso schreibst du etwas, das nicht stimmt?

Koala hat geschrieben:Damit das funktioniert, schreibe man nach der angegebenen Zeile folgendes:
Code: Alles auswählen
mysql_set_charset('utf8');

Dies setzt PHP >= 5.2.3 und MySQL >= 5.0.7 vorraus!

Nur weil es ab einer hohen PHP- und MySQL-Version funktioniert, heißt das nicht, dass man darunter auf UTF-8 verzichten soll.

Koala hat geschrieben:Man kann die Zeile mit dem "SET NAMES" drin lassen. Evtl. wird es ja doch irgendwann mal von mysql_query unterstüzt?

Nochmal für alle: Es wird unterstützt! Mit mysql_query() kann man ein beliebiges SQL-Statement an das DBMS absetzen.
Bei älteren PHP- oder MySQL-Versionen ist SET NAMES also durchaus richtig.

Für die Zukunft wünsche ich mir, dass Redaxo auf die mysqli-Extension umgestellt wird. Das wär wirklich toll und ein Ziel für die Version 5.
Zuletzt geändert von Xong am 22. Jul 2009, 14:38, insgesamt 1-mal geändert.
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: UTF-8 Datenbankverbindung

Beitragvon wolle65 » 20. Jun 2009, 12:58

Xong hat geschrieben:Ich habe eben schon darüber geschrieben: http://forum.redaxo.de/sutra68922.html#68922

Allerdings erscheint mir der Bug mittelschwer bis schwer, da sämtliche Daten falsch in der Datenbank landen.

In der Datei class.rex_sql.inc.php findet man ab Zeile 50 folgenden Code:
Code: Alles auswählen
      // connection auf UTF8 trimmen
      if (rex_lang_is_utf8())
      {
        // $this->setQuery('SET NAMES utf8');
      }

Die Kommentar-Striche vor $this->setQuery('SET NAMES utf8'); müssen also entfernt werden.

Wenn die DB-Daten UTF-8-kodiert sind, werden sie sonst nicht richtig übernommen. Warum diese Zeile auskommentiert ist, ist mir ein Rätsel.

Vielleicht könnte man das in der nächsten Version anpassen.

LG,
Xong



hallo,
habe die entsprechende datei angepasst und upgeloden.
habe den cache inter system geleert bzw. umgestellt auf de_de_utf8...
habe geprüft wie die datenbankeinstellung unter 1&1 ist - ist korrekt.

dennoch werden die umlaute falsch angezeigt?
warum

bspl. meines sandkastens hier:
http://www.propresent-media.com/redaxo/index.php?article_id=1&clang=0

was kann ich noch probieren?

gruß
wolfgang
...seit 15.Juni 2009 REDAXO 4.2.1 Fan - also von nichts eine Ahnung ;-)
Benutzeravatar
wolle65
 
Beiträge: 13
Registriert: 18. Jun 2009, 21:13
Wohnort: Wehrheim

Re: UTF-8 Datenbankverbindung

Beitragvon Torsoe » 20. Jun 2009, 14:18

wolle65 hat geschrieben:
hallo,
habe die entsprechende datei angepasst und upgeloden.
habe den cache inter system geleert bzw. umgestellt auf de_de_utf8...
habe geprüft wie die datenbankeinstellung unter 1&1 ist - ist korrekt.

dennoch werden die umlaute falsch angezeigt?
warum

bspl. meines sandkastens hier:
http://www.propresent-media.com/redaxo/index.php?article_id=1&clang=0

was kann ich noch probieren?

gruß
wolfgang



du solltest mal das charset von iso-8859-1 auf utf-8 stellen...dann stimmt auch alles
Torsoe
 
Beiträge: 9
Registriert: 6. Mai 2008, 13:45

Re: UTF-8 Datenbankverbindung

Beitragvon wolle65 » 20. Jun 2009, 14:30

Torsoe hat geschrieben:du solltest mal das charset von iso-8859-1 auf utf-8 stellen...dann stimmt auch alles



wo muss ich das machen?
danke

:oops:
...seit 15.Juni 2009 REDAXO 4.2.1 Fan - also von nichts eine Ahnung ;-)
Benutzeravatar
wolle65
 
Beiträge: 13
Registriert: 18. Jun 2009, 21:13
Wohnort: Wehrheim

Beitragvon snaft » 20. Jun 2009, 14:34

Hi!

Du musst in deinem Standard-Template folgende Zeile bearbeiten:

Code: Alles auswählen
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />


indem du "iso-8859-1" durch "utf-8" ersetzt.

Das sollte es gewesen sein.

EDITH: Check mal die Zeilen 230 und 235 in deinem CSS. Da hast du mit margin-left was durcheinandergebracht. Dies nur so am Rande erwähnt. :wink:


Beste Grüße,
Marc
Ich hasse Leute, die mitten im Satz.
Benutzeravatar
snaft
 
Beiträge: 195
Registriert: 3. Mai 2007, 14:47
Wohnort: Hamburgo

Beitragvon wolle65 » 20. Jun 2009, 14:49

snaft hat geschrieben:
indem du "iso-8859-1" durch "utf-8" ersetzt.
Das sollte es gewesen sein.


jo, dass wars ;-)


snaft hat geschrieben:EDITH: Check mal die Zeilen 230 und 235 in deinem CSS. Da hast du mit margin-left was durcheinandergebracht. Dies nur so am Rande erwähnt. Wink


an der habe ich etwas "gespielt" ... werde ich wenn ich redaxo verstehe nochmals "angehen" - Danke für den Hinweis.....

Gruß
Wolfgang
...seit 15.Juni 2009 REDAXO 4.2.1 Fan - also von nichts eine Ahnung ;-)
Benutzeravatar
wolle65
 
Beiträge: 13
Registriert: 18. Jun 2009, 21:13
Wohnort: Wehrheim

Re: UTF-8 Datenbankverbindung

Beitragvon Markus.Staab » 21. Jun 2009, 00:08

Hi,

Xong hat geschrieben:Für die Zukunft wünsche ich mir, dass Redaxo auf die mysqli-Extension umgestellt wird. Das wär wirklich toll und ein Ziel für die Version 5.


REDAXO wird nicht auf mysqli umgestellt werden... als nächstes würde auf jeden Fall PDO eingesetzt werden, da mysqli ja schon wieder "veraltet" ist.

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Re: UTF-8 Datenbankverbindung

Beitragvon Koala » 21. Jun 2009, 08:52

Xong hat geschrieben:Wieso schreibst du etwas, das nicht stimmt?
Hast recht! Richtig muss es heißen, dass die Verwendung von SET NAMES nicht empfohlen wird.
Bei mir funktionierte SET NAMES jedenfalls nicht (MySQL Server Version: 5.0.51a-24+lenny1-log, PHP/5.2.6-1+lenny3 with Suhosin-Patch).

Xong hat geschrieben:Nur weil es ab einer hohen PHP- und MySQL-Version funktioniert, heißt das nicht, dass man darunter auf UTF-8 verzichten soll.
DAS habe ich auch nicht gesagt. Die von mir angegebene Lösung funktioniert laut der PHP-Doku nunmal erst ab den angegebenen Versionen.
.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1528
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Re: UTF-8 Datenbankverbindung

Beitragvon Xong » 21. Jun 2009, 10:03

Koala hat geschrieben:
Xong hat geschrieben:Nur weil es ab einer hohen PHP- und MySQL-Version funktioniert, heißt das nicht, dass man darunter auf UTF-8 verzichten soll.
DAS habe ich auch nicht gesagt. Die von mir angegebene Lösung funktioniert laut der PHP-Doku nunmal erst ab den angegebenen Versionen.

Da hast du ja recht. Aber du musst verstehen, dass viele hier (vielleicht auch später) mitlesen, deinen Beitrag sehen und dann sagen: "Oh, da hat sich das Thema UTF-8 für mich jetzt wohl erledigt!"
Da musste ich das einfach in aller Deutlichkeit klarstellen. :roll:

Koala hat geschrieben:Bei mir funktionierte SET NAMES jedenfalls nicht (MySQL Server Version: 5.0.51a-24+lenny1-log, PHP/5.2.6-1+lenny3 with Suhosin-Patch).

Bei Problemen bitte einen eigenen Thread im passenden Subforum öffnen. :P
Zuletzt geändert von Xong am 22. Jul 2009, 14:38, insgesamt 1-mal geändert.
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Beitragvon Koala » 21. Jun 2009, 10:41

Da das zum Thema passt, bleib ich mal hier.

Habe jetzt zum Testen mal etwas für eine Modulausgabe zusammengestrickt:
Code: Alles auswählen
<pre>
<?php
$_sql = new rex_sql();

echo 'PHP-Version: '; echo phpversion(); echo '<br />';
echo 'MySQL-Version: '; echo $_sql->getServerVersion(); echo '<br />';
echo 'mysql_client_encoding: ';
print_r (mysql_client_encoding($_sql->identifier)); echo '<br />';

$_q = 'SHOW VARIABLES LIKE "%character_set%";';
$_qa = $_sql->setQuery($_q);

echo '<b>SHOW VARIABLES LIKE "%character_set%": </b>'; echo '<br />';
$foo = $_sql->getArray();
foreach ($foo as $key => $val) {
  echo '  '. $val['Variable_name'] .' => '. $val['Value']; echo '<br />';
}

echo '<br /><b>Setze mysql_set_charset:</b>'; echo '<br />';
mysql_set_charset('utf8', $_sql->identifier);
echo 'mysql_client_encoding: ';
print_r (mysql_client_encoding($_sql->identifier)); echo '<br />';

$_q = 'SHOW VARIABLES LIKE "%character_set%";';
$_qa = $_sql->setQuery($_q);

echo '<b>SHOW VARIABLES LIKE "%character_set%": </b>'; echo '<br />';
$foo = $_sql->getArray();
foreach ($foo as $key => $val) {
  echo '  '. $val['Variable_name'] .' => '. $val['Value']; echo '<br />';
}
?>
</pre>
<br /><br />

Die Ergebnisse dieser Abfragen sind etwas verwirrend.

Erster Test:
SET NAMES in rex_sql ist deaktiviert.
Wie zu erwarten war, gibt mir mysql_client_encoding ein latin1 zurück. Die meisten der "character_set*" stehen ebenfalls auf latin1 (was hier soweit ersteinmal OK ist).

Zweiter Test:
SET NAMES in rex_sql ist aktiviert.
mysql_client_encoding liefert wieder ein latin1.
Die meisten der "character_set*" sind nun auf utf8 gesetzt (character_set_server ist weiterhin latin1).

Im zweiten Teil des Testscripts wird mysql_set_charset('utf8'); gesetzt.
Erst danach liefert mir mysql_client_encoding ein utf8.
Hier stimmt etwas mit der Rückgabe von mysql_client_encoding nicht?
Oder was übersehe ich?


Edit
Nach weiteren Tests und der Suche nach Antworten mittels Suchmaschine komme ich zu dem Schluß, dass die Funktion mysql_client_encoding bei mir einen falschen Wert zurückliefert. Werde also eine andere Abfrage verwenden müssen und lieber ganz auf diese Funktion verzichten.
.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1528
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Beitragvon Xong » 18. Sep 2009, 15:38

Ich muss nochmal auf diesen Bug hinweisen, der leider immer noch nicht ausgebessert wurde.

Immer wieder taucht dieser Bug auf und macht mir einen Strich durch die Rechnung bzw. kostet unnötige Zeit, weil die Daten in der Datenbank nicht UTF-8 kodiert gespeichert werden.

Gerade sitze ich an einem neuen Suchaddon, dass logischerweise viel mit der Datenbank arbeitet.

Wäre es nicht möglich, diesen Bug wenigstens in der Entwicklerversion (Zeile 53) zu beheben?

Bitte! :cry:
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Beitragvon ynamite » 31. Mär 2010, 17:35

Xong hat geschrieben:
Wäre es nicht möglich, diesen Bug wenigstens in der Entwicklerversion (Zeile 53) zu beheben?

Bitte! :cry:


da muss ich Xong absolut zustimmen, wie schwierig ist es denn bitteschön das zu beheben??? Und bitte nicht nur in der Entwicklerversion! ich sitze hier seit fast 4 Stunden und versuche das Problem zu behen, durchsuche Foren, das gesamte Internet usw. weil ich anfangs sogar dachte das Problem sei bei meinem Hoster usw. echt, da krieg ich en riesen Hals... Ausserdem ist der Fehler nun ja wirklich rasch behoben.

Und das Argument das die Daten mit Redaxo ja richtig dargestellt werden, zählt für mich nicht. Diese Problem wurde schon zig mal im Forum angesprochen seit nun mehr 2 Jahren aber immer irgendwie tot geschwiegen. Bis jetzt hat sich meines Wissens (ich lasse mich auch gern belehren) niemand vom Redaxo-Team dazu geäussert oder annerkannt das es sich schlichtweg um einen Bug handelt. Stattdessen wird behauptet dass das alles korrekt sei und keine Probleme macht. So ein Mist!

Entschuldigung wenn ich mich ein bisschen angepisst fühle aber in der Regel kann man micht euch gut reden, ihr seid sehr hilfsbereit und freundlich aber wieso das man hierzu keine Infos findet oder einfach ganz klar gesagt wird was Sache ist, kann und will ich nicht verstehen...

Nichts für ungut
gruss
y
BLUEMOUSE | BlueMouse GmbH
Benutzeravatar
ynamite
 
Beiträge: 118
Registriert: 26. Jan 2007, 13:59
Wohnort: baden

Beitragvon nitzer » 1. Apr 2010, 09:03

kann das leider nur bestätigen. ich muß grad mit einigen seiten auf einen neuen server umziehen und habe arge probleme damit das zu laufen zu kriegen. bisher kommen keine umlaute richtig rüber :-(
nitzer
 
Beiträge: 187
Registriert: 16. Okt 2006, 21:53
Wohnort: Erkrath


Zurück zu Bugs [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast