Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: SHOP UTF-8 ...

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #45 am: 30. Juli 2013, 00:22:55
    Heureka !

    In /admin/orders.php
    Code: PHP  [Auswählen]
    $smarty->assign('ORDER_DATE', utf8_encode(xtc_date_long($check_status['date_purchased'])));
    und die change_order_mail ist okay.

    Müsste man dann auch, wie du schon sagst, in der /send_order.php, und zwar an zwei Stellen, machen (für Betreff und Überschrift der Bestellbestätigung).

    Danke dir für das Interesse und die Mühe.

    Wundern tue ich mich aber, daß das utf8_encode() bei Aufruf der Funktion wirkt, nicht jedoch in der Funktion selbst.

    Gruß und buenas noches,
    noRiddle

    Modulfux

    • Experte
    • Beiträge: 3.590
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #46 am: 30. Juli 2013, 00:37:17
    Wieso es beim direkten Aufruf in der Funktion nicht funktioniert bleibt mir auch ein Rätsel. Deshalb habe ich eben im eignen Shop nachgesehen und dort habe ich es auch so gelöst, wie ich dir geschrieben habe.

    Muchos saludos y buenas noches
    Ronny

    P.S. Wegen "buenas noches" musste ich gleich unweigerlich an die letzte PK von Guardiola denken, als er die Reporter mit "Gute Nacht" begrüßte.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #47 am: 30. Juli 2013, 00:39:51
    Hahaha, jau, woher soll er wissen, daß man das so hier nicht sagen kann,
    der war zu lange in Barcelona.

    Nachtrag:
    Dortmund hat's ihm erstmal gezeigt..., buenas noches... :-D

    Nachtrag II:
    Habe übrigens bei mir im E-Mail-Client (Thunderbird) aus- und eingehende Nachrichten auf UTF-8 stehen.
    Könnte auch noch Einwirkung haben wenn das jemand anders eingestellt hat.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #48 am: 13. Februar 2015, 14:34:46
    Das ist der beste Thread zum Thema Shop auf UTF-8 konvertieren ..... Schade dass die Infos nicht alle in die Wiki eingeflossen sind. Das mit den zusätzlichen Mails ist wichtig!

    Was mir gerade auffällt, wenn ich die TXT Dateien im Mail Ordner auf UTF-8 ändere:
    signatur.txt
    Zitat
    Mit freundlichen Gr��en
    send_gift_to_friend.txt
    Zitat
    Falls es mit dem obigen Link Probleme beim Einl�� kommen sollte,
    k��n Sie den Betrag w婲end des Bestellvorganges verbuchen.
    Hat das keinen Einfluss?

    Was auch hier in den Thread und in die Wiki gehört ist das Script von noriddle (modifiziert von mir)
    Code: PHP  [Auswählen]
    <?php
    <?php
    include 'includes/application_top.php';
     
    //BOC set all tables to collation utf8_general_ci and convert contents to utf8, noRiddle
    $query = xtc_db_query("SHOW TABLES");
    $fail=false;
    while ($result = xtc_db_fetch_array($query)) {
            foreach ($result as $key => $table) {
                    if(xtc_db_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci")) {
                            echo $key . ' &raquo; ' . $table . ': - converted to UTF-8 and collation utf8_general_ci <br />';
                            xtc_db_query("ALTER TABLE " . $table . " COLLATE utf8_general_ci"); // set collation again, for the case it is ignored, because nothing to convert
                    } else {
                            echo $key . ' &raquo; ' . $table . ': - conversion to UTF-8 and collation utf8_general_ci failed <br />';
                            $fail=true;
                    }
            }
    }
    if (!$fail) { // if everything fine, set default values for database
            if ( xtc_db_query("ALTER DATABASE " . DB_DATABASE . " DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci")) {
                    echo "Datenbank konvertiert <br />";
            } else {
                    echo "Datenbank konvertierung fehlgeschlagen <br />";
            }
    }

    //EOC set all tables to collation utf8_general_ci and convert contents to utf8, noRiddle
     

    Was meiner Meinung auch noch dazugehört ist ein Hinweis, dass manche Module wie z.B. rss_feed blöderweise einen hart codierten Zeichensatz verwenden!
    In der rss_news.php steht
    Code: PHP  [Auswählen]
    echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n";

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #49 am: 13. Februar 2015, 16:07:33
    Das ALTER DATABASE Statement ist meines Erachtens nicht nötig.
    Das DEFAULT CHARACTER SET und das DEFAULT COLLATE sind unerheblich. Ergeblich ist der Zeichensatz der DB-Verbindung.
    Will sagen, wenn z.B. das DEFAULT CHARACTER SET der DB auf utf8 steht, die Daten in der DB aber in iso-8859-15 gespeichert sind (und die Collation entsprechend auf z.B. latin1_general_ci steht), die DB-Verbindung nun aber auf latin1 steht (siehe die Konstante DB_SERVER_CHARSET in den configure.php-Dateien), gibt es keine Probleme.
    Gesetzt wird die DB-Verbindung mittels der oben genannten Konstanten in der Funktion xtc_db_connect(), die für alle Queries an die DB benutzt wird.

    Das gleiche gilt umgekehrt, wenn also der DEFAULT CHARACTER SET auf latin1 steht jedoch die Daten in den Tabellen in utf8 gespeichert sind und die DB-Verbindung auf utf8 gesetzt ist.

    Die DB muß lediglich wissen in welcher Kodierung die Queries an die DB erfolgen.

    Fazit:
    Die Konvertierung der TABLEs in das benötigte CHARACTER SET und die benötigte COLLATION reicht völlig aus, wenn die DB-Verbindung, also die Konstante DB_SERVER_CHARSET entsprechend gesetzt ist. Ein ALTER DATABASE Statement um die DEFAULTs zu setzen ist nicht nötig.

    Noch zur Klärung:
    Um Daten in die DB in der gewünschten Kodierung zu speichern ist die Konstante DB_SERVER_CHARSET wichtig.
    Um die Daten aus der DB zu holen ebenso.
    Soll die Kodierung in welcher der Shop läuft geändert werden, müssen lediglich die ALTER TABLE Statements aus dem Skript durchgeführt werden damit die bereits in der DB gespeicherten Daten in die gewünschte Kodierung umgewandelt werden.
    Kommen tut das Skript von hier.

    Nötig ist also folgendes wenn man nachträglich auf UTF-8 umstellen möchte:
    (! Dabei bitte die Syntax-Unterschiede beachten (utf8 / utf-8)
    • Skript für die DB laufen lassen (ohne ALTER DATABASE Statement)
    • DB_SERVER_CHARSET in den beiden configure.php-Dateien auf utf8 setzen
    • Backend => Land / Steuer => Sprachen => "meta-content" ("Charset" im Bearbeiten-Modus) auf utf-8 setzen
    • Wenn nicht vorhanden in den Dateien /lang/SPRACHE/SPRACHE.php die setlocale() erweitern um 'de_DE.UTF-8' bzw. 'en_GB.UTF-8'
    • Evtl., je nach Server-Konfiguration, entweder in der Root-htaccess das
      AddDefaultCharset UTF-8
      setzen oder in den beiden application_top.php ganz oben das
      ini_set("default_charset", "utf-8");
    • In der aktuellen modified-Version 1.06 noch folgendes suchen:
      In /includes/classes/class.inputfilter.php das
      $source = html_entity_decode($source, ENT_QUOTES, "ISO-8859-1");
      ändern in das
      $source = html_entity_decode($source, ENT_QUOTES, strtoupper($_SESSION['language_charset']));
    • Für den RSS-Feed im Backend auf der Startseite in /admin/start.php alle utf8_decode() entfernen (kommt 3 x vor soweit ich weiß)
    • In evtl. eingebauten Erweiterungen, z.B. RSS-Feed, kommt es darauf an wie die Erweiterungen konfiguriert sind. Handelt es sich um XML oder CSV muß evtl. die Kodierung angepasst werden oder mittels entsprechender Funktionen (utf8_encode(), utf8_decode()) die Ausgabe modifiziert werden.

    Hoffe habe nichts vergessen.

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #50 am: 13. Februar 2015, 16:28:25
    Das DEFAULT COLLATE macht in dem Fall Sinn, wenn Du eine neue Tabelle anlegst ohne Angabe der Kollation! Du baust ein Modul ein mit
    CREATE TABLE willi

    Welche Kollation bekommt willi? Die im Default angegebene, oder nicht?

    Es gibt Module die Tabellen anlegen!

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #51 am: 13. Februar 2015, 16:53:18
    Wir reden hier über den Shop und nicht über sog. Module.
    Wenn ein Skript aus einer Erweiterung Tabellen anlegt sollte dort bei den Feldern wo es wichtig ist die Collation angegeben sein (z.B. bei Feldern mit Type text, char und varchar).
    Ist dein Shop auf UTF-8 und eine Erweiterung die du einbauen möchtest hat im Tabellen-Erstellungs-Skript z.B. die Collation latin1_general_ci, mußt du das eben ändern.
    Das DEFAULT COLLATE ändert daran nichts. Schaden kann es zwar auch nicht ist aber nicht nötig.
    Das sage ich auch nur weil es hier darum geht wie ich meinen Shop auf UTF-8 umstellen kann und was dazu nötig ist.

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #52 am: 13. Februar 2015, 17:03:27
    Ist dein Shop auf UTF-8 und eine Erweiterung die du einbauen möchtest hat im Tabellen-Erstellungs-Skript z.B. die Collation latin1_general_ci, mußt du das eben ändern.
    Klar und das Modul das GAR KEINE angegeben hat? Ich halte es wichtig auch vorausschauend zu denken! Sonst kommt wieder ein Laie angerannt weil irgendwas nicht funktioniert und wir reden 2 Tage um den heißen Brei herum bis sich raus stellt, dass er KEINE Kolloation angegeben hatte und somit die Tabelle die FALSCHE default Einstellung genommen hat.

    Dein Script ist so auch buggy. Oder sollen wir jetzt 150 Leuten erklären warum das Script Tabellen auslässt? Ist mir heute genau so passiert. Habe es mehrfach laufen lassen, ALLE leeren Tabellen wurden vom Script nicht geändert, aber die Rückmeldung war true.
    Server Version 5.6.13-log
    Client Version: 5.0.51a
    Wenn Du das nicht reproduzieren kannst, es liegt möglicherweise daran:
    Zitat
    Die Version der verwendeten PHP MySQL Bibliothek 5.0.51a unterscheidet sich von der Version des MySQL Servers 5.6.13. Dies kann zu unerwartetem Verhalten führen.

    Das sollte aber meiner Meinung nach Beachtung finden, um die Anzahl der hier im Forum diskutierten Probleme zu reduzieren.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #53 am: 13. Februar 2015, 17:13:58
    Du verkennst, daß es bei meinen Erklärungen darum geht einen Shop nachträglich auf UTF-8 umzustellen. Da sind ja alle Erweiterungen bereits drin.
    Um einen Shop schon direkt in UTF-8 zu installieren wird das Skript ja nicht benötigt.
    Wer Erweiterungen einfach blind einbaut und danach Probleme hat sollte vielleicht einen Fachmann ran lassen.

    Deinen Ton solltest du im übrigen etwas mäßigen und statt dessen sollten wir zusammen daran arbeiten herauszufinden warum das Skript bei dir nicht alle Tabellen umgewandelt hat. Dann müssen wir auch nicht "150 Leuten" irgendwas erklären.
    Ich selbst habe das Skript schon mehrfach erfolgreich benutzt, wie auch hier von mir beschrieben.

    Außerdem denke ich, daß sich sicherlich alle über deine Kompetenz freuen werden wenn du das angeblich buggy Skript korrigierst.

    Woher stammt dein Zitat und worauf genau bezieht es sich ?
    Das ist ein wenig zu allgemein ausgedrückt, nicht ?

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #54 am: 13. Februar 2015, 17:25:10
    Ich habe gerade erfolgreich einen Laufenden Shop nachträglich auf UTF8 umgestellt. Zum Umstellen gehört meiner Ansicht nach auch die Datenbank Default Einstellungen zu ändern.

    Das Zitat stammt aus dem Frontend des phpMyAdmin V 2.11.9.5

    Ich kann mich auch erinnern, dass Du schon mal mit jemandem das durchgekaut hattest. Du hattest darauf bestanden, dass Dein Script immer funktioniert. Bei ihm ging es aber eben nicht für alle Tabellen. Das gleiche hatte ich jetzt auch. Der andere hatte damals was davon geschrieben, dass er die fehlenden Tabellen einfach von Hand umgestellt hatte.

    Ich kann den Fehler reproduzieren.

    Mein Script das ich oben gepostet habe funktioniert. Es macht halt einen Schritt doppelt.

    Mein Verdacht ist, dass aufgrund eines Bugs in Mysql der Teil COLLATE utf8_general_ci ignoriert wird, wenn CONVERT TO CHARACTER SET utf8 nichts zu tun bekam. Eventuell kommt da intern innerhalb der Engine null anstatt true.

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #55 am: 13. Februar 2015, 17:28:13
    Da stand erst UTF8 mit meinem Modifizierten Script

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #56 am: 13. Februar 2015, 17:40:56
    Mmh, interessant.
    Ist mir noch nie aufgefallen.
    Wenn das erneute Setzen der Collation nach der 'true' Ausgabe das Problem behebt, kudos to Bonasi.

    Hier das Skript nochmals inkl. Credits in den Kommentaren.
    Code: PHP  [Auswählen]
    <?php
    include 'includes/application_top.php';
     
    //BOC set all tables to collation utf8_general_ci and convert contents to utf8, noRiddle
    $query = xtc_db_query("SHOW TABLES");
    $fail=false; //Bonsai
    while ($result = xtc_db_fetch_array($query)) {
        foreach ($result as $key => $table) {
            if(xtc_db_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci")) {
                echo $key . ' &raquo; ' . $table . ': - converted to UTF-8 and collation utf8_general_ci <br />';
                xtc_db_query("ALTER TABLE " . $table . " COLLATE utf8_general_ci"); // set collation again in case it is ignored because nothing to convert, Bonsai
            } else {
                echo $key . ' &raquo; ' . $table . ': - conversion to UTF-8 and collation utf8_general_ci failed <br />';
                $fail=true; //Bonsai
            }
        }
    }
    //EOC set all tables to collation utf8_general_ci and convert contents to utf8, noRiddle
    // BOC if everything fine, set default values for database, Bonsai (imho not necessary, noRiddle)
    if (!$fail) {
        if ( xtc_db_query("ALTER DATABASE " . DB_DATABASE . " DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci")) {
            echo "Datenbank konvertiert <br />";
        } else {
            echo "Datenbank konvertierung fehlgeschlagen <br />";
        }
    }
    // EOC if everything fine, set default values for database, Bonsai (imho not necessary, noRiddle)
    ?>

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #57 am: 13. Februar 2015, 17:52:14
    Ist eigentlich kein Fehler in Deinem Script .... eher ein Workaround um einen Bug zu umgehen.

    Ich komme halt aus der Sysadmin Sektion .... wir scripten immer um Bugs außen rum die Programmierer eingebaut haben :-D

    Ich mache bei Gelegenheit noch einen Test, heute keine Zeit mehr, muss jetzt weg.

    Eventuell funktioniert das originale Script auch auf der buggy Mysql Version, wenn man die beiden Befehle vertauscht.
    Also so:
    Code: PHP  [Auswählen]
    ALTER TABLE " . $table . " COLLATE utf8_general_ci CONVERT TO CHARACTER SET utf8

    Wenn das klappt, mach ich bei mysql ein Ticket auf.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #58 am: 16. Februar 2015, 23:51:35
    Schon weiter getestet ?

    Gruß,
    noRiddle

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.147
    • Geschlecht:
    Re: SHOP UTF-8 ...
    Antwort #59 am: 17. Februar 2015, 08:53:37
    noch keine Zeit gehabt