Modulshop - Eine große Auswahl an neuen und hilfreichen Modulen für die modified eCommerce Shopsoftware
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: xtc_date_long.inc.php vs UTF8

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    xtc_date_long.inc.php vs UTF8
    am: 25. Januar 2016, 12:51:43
    Hat jemand eine Idee warum die Funktion xtc_date_long kein sauberes UTF-8 ausspuckt?

    original:

    Code: PHP  [Auswählen]
      function xtc_date_long($raw_date) {
        if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '') ) return false;

        $year = (int)substr($raw_date, 0, 4);
        $month = (int)substr($raw_date, 5, 2);
        $day = (int)substr($raw_date, 8, 2);
        $hour = (int)substr($raw_date, 11, 2);
        $minute = (int)substr($raw_date, 14, 2);
        $second = (int)substr($raw_date, 17, 2);
           
        return strftime(DATE_FORMAT_LONG, mktime($hour,$minute,$second,$month,$day,$year));
      }

    So funktioniert es .... was mir aber nicht gefällt ....

    Code: PHP  [Auswählen]
      function xtc_date_long($raw_date) {
        if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '') ) return false;

        $year = (int)substr($raw_date, 0, 4);
        $month = (int)substr($raw_date, 5, 2);
        $day = (int)substr($raw_date, 8, 2);
        $hour = (int)substr($raw_date, 11, 2);
        $minute = (int)substr($raw_date, 14, 2);
        $second = (int)substr($raw_date, 17, 2);
           
        return utf8_encode(strftime(DATE_FORMAT_LONG, mktime($hour,$minute,$second,$month,$day,$year)));
      }


    Linkback: https://www.modified-shop.org/forum/index.php?topic=34248.0

    webald

    • modified Team
    • Beiträge: 2.791
    Re: xtc_date_long.inc.php vs UTF8
    Antwort #1 am: 25. Januar 2016, 13:49:32
    Erste Annahme: strftime gibt bereits UTF-8 zurück. Damit wäre das doppelt codiert.

    Jetzt kommt das (Windows)-Aber:

    Code: PHP  [Auswählen]
    function runsOnWindows() {
        php_uname();
        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
            return true;
        }
        return false;
    }

    $month = strftime('%B');
    if (runsOnWindows()) {
        $month = utf8_encode($month);
    }

    So wie ich gelesen habe gibt Windows bei strftime grundsätzlich KEIN UTF-8 zurück und benötigt uttf8-Encoding.

    Jetzt ist mir an der Funktion aber noch etwas aufgefallen:
    Warum gibt die Funktion 2 unterschiedliche Datentypen zurück? Einmal ein gültiges Datum und einmal false. Wäre es nicht sinnvoller immer ein Datum und statt false 0000-00-00 00:00:00 zurückzugeben?

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: xtc_date_long.inc.php vs UTF8
    Antwort #2 am: 25. Januar 2016, 13:59:32
    Das utf8_encode() habe ich jetzt reingemurkst, weil der Shop produktiv ist und ich schnell eine Lösung brauchte. Da der Shop aber so nicht mehr portierbar ist auf ISO-irgendwas, wollte ich den Murks abschaffen. Original fehlt das .... und liefert dann für März Unsinn in meinem UTF-8 Shop.

    Nein, läuft nicht auf Windoof. Webserver auf Windoof ist meiner Meinung nach zu 95% grober Unfug, zumindest im Internet. Als Microsoft ihre eigene Webseite aufgrund von viel Gespött der Linux Community irgendwann mal von Apache auf IIS umgestellt hatten, dauerte es WOCHEN, bis die Seite wieder sauber funktioniert hat.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: xtc_date_long.inc.php vs UTF8
    Antwort #3 am: 25. Januar 2016, 14:54:03
    Mag sein, dass Dein Shop nicht auf Windows läuft, aber es muss ja eine generelle Lösung her. Und dann ist da ja häufig noch Xampp local auf Windows und produktiv dann Linux. Da wären UTF-Coding-Fehler vorprogrammiert.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: xtc_date_long.inc.php vs UTF8
    Antwort #4 am: 26. Januar 2016, 01:24:07
    Hallo Bonsai,

    die Lösung mit utf8_encode() wird eigentlich häufig vorgeschlagen, aber Du kannst auch mal folgendes versuchen.

    Suche in 'lang/german/german.php' und 'lang/german/admin/german.php' folgende Zeile
    Code: PHP  [Auswählen]
    @setlocale(LC_TIME, 'de_DE@euro', 'de_DE', 'de-DE', 'de', 'ge', 'de_DE.ISO_8859-1', 'German','de_DE.ISO_8859-15');
    und ersetze sie mit dieser
    Code: PHP  [Auswählen]
    @setlocale(LC_TIME, 'de_DE.UTF8', 'de_DE@euro', 'de_DE', 'de-DE', 'de', 'ge', 'de_DE.ISO_8859-1', 'German','de_DE.ISO_8859-15');

    vorab kannst Du es auch so testen
    Code: PHP  [Auswählen]
    if (setlocale(LC_TIME, 'de_DE.utf8') == false) { echo 'de_DE.utf8 NEIN';} else { echo 'de_DE.utf8 JA';}

    Weiter Infos hier -> http://us3.php.net/setlocale

    Gruss
    Hanspeter

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: xtc_date_long.inc.php vs UTF8
    Antwort #5 am: 26. Januar 2016, 09:07:13
    Da mein Shop eigentlich komplett auf UTF8 läuft, sieht die Zeile bei mir so aus:
    Code: PHP  [Auswählen]
    setlocale(LC_TIME, 'de_DE@euro', 'de_DE', 'de-DE', 'de', 'ge', 'German','de_DE.UTF-8');

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: xtc_date_long.inc.php vs UTF8
    Antwort #6 am: 26. Januar 2016, 09:22:53
    Ich habs!

    Das geht:
    Code: PHP  [Auswählen]
    @setlocale(LC_TIME, 'de_DE.UTF-8','de_DE@euro', 'de_DE', 'de-DE', 'de', 'ge', 'German');
    Die UTF8 Variante muss als erstes stehen.
    Managed Server
    33 Antworten
    19771 Aufrufe
    02. Dezember 2014, 17:35:08 von WeXsler
    60 Antworten
    28175 Aufrufe
    21. August 2014, 14:13:29 von noRiddle (revilonetz)
    1 Antworten
    2132 Aufrufe
    31. Oktober 2010, 08:47:20 von franky_n
    0 Antworten
    1300 Aufrufe
    29. Juli 2015, 23:33:58 von Nils