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: PHP 7.1.22 führt zu Umlautproblemen in Textmails und bei Neuinstallationen

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Mir ist aufgefallen, dass seit der Umstellung auf Php 7.1.22 die Umlaute in der Emailvorschau in Textform nicht mehr richtig funktionieren. Und auch eine Neuinstallation bringt Umlautfehler.

    Nachdem ich keine Änderungen meiner Dateien zu den original Shopdateien finden konnte und der Fehler im Demoshop (PHP 7.0.30) nicht auftrat, hatte ich testweise eine Neuinstallation auf einer anderen Domain getestet. Dabei wurden ohne Änderungen direkt nach der Installation schon die Kundengruppen Händler sowie die Bundesländer falsch geschrieben. Zusätzlich die falschen Umlaute in der Emailvorschau. Nach langem testen hatte ich umgestellt auf PHP 7.0.32 und schon kam der Fehler in der Emailvorschau nicht mehr. Der Rest blieb falsch.

    Danach neue Testinstallation mit PHP 7.0.32 bei der Installation und es kamen keine Umlautprobleme bei Händler und Bundesländer und der Emailvorschau als Text.

    Da ich aber nicht auf PHP 7.1 verzichten wollte, hab ich weiter gesucht. Letztlich kam das heraus, was ich im Ticket #1188 zusammengefasst habe.

    Fehler, wenn man auf Emailvorschau geht:
    Code: XML  [Auswählen]
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: mb_detect_encoding(): Illegal argument in File: /inc/html_encoding.php on Line: 46
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #0 - /includes/external/smarty/smarty_3/sysplugins/smarty_internal_resource_file.php called at Line 162
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #1 - /includes/external/smarty/smarty_3/sysplugins/smarty_template_source.php called at Line 210
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #2 - /includes/external/smarty/smarty_3/sysplugins/smarty_internal_templatecompilerbase.php called at Line 421
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #3 - /includes/external/smarty/smarty_3/sysplugins/smarty_internal_templatecompilerbase.php called at Line 351
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #4 - /includes/external/smarty/smarty_3/sysplugins/smarty_template_compiled.php called at Line 184
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #5 -/includes/external/smarty/smarty_3/sysplugins/smarty_template_compiled.php called at Line 141
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #6 - /includes/external/smarty/smarty_3/sysplugins/smarty_template_compiled.php called at Line 105
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #7 - /includes/external/smarty/smarty_3/sysplugins/smarty_internal_template.php called at Line 206
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #8 - /includes/external/smarty/smarty_3/sysplugins/smarty_internal_templatebase.php called at Line 232
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #9 -/includes/external/smarty/smarty_3/sysplugins/smarty_internal_templatebase.php called at Line 116
    [23-09-2018 19:40:21] E_WARNING : LoggingManager: Backtrace #10 -/create_account.php called at Line 482

    Fehlermeldung bei Installation mit PHP 7.1.22
    Code: XML  [Auswählen]
    [27-09-2018 20:24:29] E_WARNING : LoggingManager: mb_detect_encoding(): Illegal argument in File: /inc/html_encoding.php on Line: 46
    [27-09-2018 20:24:29] E_WARNING : LoggingManager: Backtrace #0 - /admin/includes/db_actions.php called at Line 283
    [27-09-2018 20:24:29] E_WARNING : LoggingManager: Backtrace #1 - /_installer/install_step1.php called at Line 166
    [27-09-2018 20:25:44] E_WARNING : LoggingManager: mb_detect_encoding(): Illegal argument in File: /inc/html_encoding.php on Line: 46
    [27-09-2018 20:25:44] E_WARNING : LoggingManager: Backtrace #0 - /_installer/install_step2.php called at Line 342
    [27-09-2018 20:25:44] E_WARNING : LoggingManager: mb_convert_encoding(): Illegal character encoding specified in File: /inc/html_encoding.php on Line: 50
    [27-09-2018 20:25:44] E_WARNING : LoggingManager: Backtrace #0 -/_installer/install_step2.php called at Line 342

    Lösung:

    Wahrscheinlich wegen diesem fix in 7.1.22

    Fixed bug #76704 (mb_detect_order return value varies based on argument type) und der damit zusammenhängenden Supported Character Encoding Liste

    In Zeile 46 der /inc/html_encoding.php steht

    Code: PHP  [Auswählen]
    mb_detect_encoding($string, ENCODE_DEFINED_CHARSETS)
    in
    Code: PHP  [Auswählen]
    steckt
    Code: PHP  [Auswählen]
    string mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = FALSE ]] )
    und mb_detect_order wurde geändert.

    Es liegt an dieser Zeile in der /inc/html_encoding.php:

    Code: PHP  [Auswählen]
    define('ENCODE_DEFINED_CHARSETS','ASCII,UTF-8,ISO-8859-1,ISO-8859-15,cp866,cp1251,cp1252,KOI8-R,BIG5,GB2312,BIG5-HKSCS,Shift_JIS,EUC-JP');

    Wenn man BIG5-HKSCS daraus entfernt, dann funktioniert die Emailvorschau wieder fehlerfrei und es wird kein Fehler im log geschrieben. Anscheinend wird dieses Charset nicht mehr unterstützt. Oder es gibt noch eine andere Datei im Shopsystem, die die Charsets vorgibt und da steht es nicht drin.

    GB2312 steht auch nicht in der Liste der unterstützen Charsets, führt aber nicht zu einem Fehler, wenn es drin bleibt.

    Gruß Timm

    P.S.
    Ich hatte vorher auch testweise die txt Maildatei change_order.txt  in utf-8 gespeichert und es kam auch kein Umlautfehler mehr. Das konnte aber nicht die Lösung sein. Torsten hatte mir darauf geschrieben, dass der Shop selbstständig in der Lage ist Dateien in unterschiedlich gespeicherten Charsets zu encoden und decoden durch die html_encoding.php. Sonst hätten wir mit Utf-8 Shops immer Probleme, weil die Maildateien fast alle in iso gespeichert sind. Bevor jemand denkt, dass das hilft.

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

    vr

    • modified Team
    • Beiträge: 2.664
    Hallo Timm,

    danke für Deine Forschung.

    - was bekommst Du, wenn Du auf Deinem 7.1.22 php ein mb_list_encodings() machst? Sind die in der /inc/html_encoding.php geforderten Zeichenkodierungen enthalten, abgesehen von BIG5-HKSCS?

    - in einem Userkommentar in http://php.net/manual/de/mbstring.supported-encodings.php steht, dass GB2312 durch GB18030 ersetzt wurde. https://de.wikipedia.org/wiki/GB_18030 bestätigt das, GB18030 ist der Nachfolgestandard zu GB2312, und im Prinzip das chinesische UTF-8. Vermutlich wird GB2312 php-intern darauf abgebildet.

    Vorschlag: Wir entfernen BIG5-HKSCS aus der Liste und ersetzen GB2312 durch GB18030. Wenn ich es richtig sehe, braucht man dann auch kein BIG-5 mehr, weil es in GB18030 enthalten ist.

    Viele Grüße, Volker

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Moin Volker

    Das war wirklich Forschung. Hat mich nen Tag gekostet, bis ich drauf gekommen bin.

    Hier die formatierte kurze Ausgabe in 7.1.22

    Code: PHP  [Auswählen]
    Array (
    [0] => pass
    [1] => auto
    [2] => wchar
    [3] => byte2be
    [4] => byte2le
    [5] => byte4be
    [6] => byte4le
    [7] => BASE64
    [8] => UUENCODE
    [9] => HTML-ENTITIES
    [10] => Quoted-Printable
    [11] => 7bit
    [12] => 8bit
    [13] => UCS-4
    [14] => UCS-4BE
    [15] => UCS-4LE
    [16] => UCS-2
    [17] => UCS-2BE
    [18] => UCS-2LE
    [19] => UTF-32
    [20] => UTF-32BE
    [21] => UTF-32LE
    [22] => UTF-16
    [23] => UTF-16BE
    [24] => UTF-16LE
    [25] => UTF-8
    [26] => UTF-7
    [27] => UTF7-IMAP
    [28] => ASCII
    [29] => EUC-JP
    [30] => SJIS
    [31] => eucJP-win
    [32] => EUC-JP-2004
    [33] => SJIS-win
    [34] => SJIS-Mobile#DOCOMO
    [35] => SJIS-Mobile#KDDI
    [36] => SJIS-Mobile#SOFTBANK
    [37] => SJIS-mac
    [38] => SJIS-2004
    [39] => UTF-8-Mobile#DOCOMO
    [40] => UTF-8-Mobile#KDDI-A
    [41] => UTF-8-Mobile#KDDI-B
    [42] => UTF-8-Mobile#SOFTBANK
    [43] => CP932
    [44] => CP51932
    [45] => JIS
    [46] => ISO-2022-JP
    [47] => ISO-2022-JP-MS
    [48] => GB18030
    [49] => Windows-1252
    [50] => Windows-1254
    [51] => ISO-8859-1
    [52] => ISO-8859-2
    [53] => ISO-8859-3
    [54] => ISO-8859-4
    [55] => ISO-8859-5
    [56] => ISO-8859-6
    [57] => ISO-8859-7
    [58] => ISO-8859-8
    [59] => ISO-8859-9
    [60] => ISO-8859-10
    [61] => ISO-8859-13
    [62] => ISO-8859-14
    [63] => ISO-8859-15
    [64] => ISO-8859-16
    [65] => EUC-CN
    [66] => CP936
    [67] => HZ
    [68] => EUC-TW
    [69] => BIG-5
    [70] => CP950
    [71] => EUC-KR
    [72] => UHC
    [73] => ISO-2022-KR
    [74] => Windows-1251
    [75] => CP866
    [76] => KOI8-R
    [77] => KOI8-U
    [78] => ArmSCII-8
    [79] => CP850
    [80] => JIS-ms
    [81] => ISO-2022-JP-2004
    [82] => ISO-2022-JP-MOBILE#KDDI
    [83] => CP50220
    [84] => CP50220raw
    [85] => CP50221
    [86] => CP50222 )

    Hier die erweiterte umformatierte Ausgabe in 7.1.22 mit Aliases

    Code: PHP  [Auswählen]
    Array (
     [0] => pass
     [1] => auto
     [2] => wchar
     [3] => byte2be
     [4] => byte2le
     [5] => byte4be
     [6] => byte4le
     [7] => BASE64
     [8] => UUENCODE
     [9] => HTML-ENTITIES
     [10] => Quoted-Printable
     [11] => 7bit
     [12] => 8bit
     [13] => UCS-4
     [14] => UCS-4BE
     [15] => UCS-4LE
     [16] => UCS-2
     [17] => UCS-2BE
     [18] => UCS-2LE
     [19] => UTF-32
     [20] => UTF-32BE
     [21] => UTF-32LE
     [22] => UTF-16
     [23] => UTF-16BE
     [24] => UTF-16LE
     [25] => UTF-8
     [26] => UTF-7
     [27] => UTF7-IMAP
     [28] => ASCII
     [29] => EUC-JP
     [30] => SJIS
     [31] => eucJP-win
     [32] => EUC-JP-2004
     [33] => SJIS-win
     [34] => SJIS-Mobile#DOCOMO
    [35] => SJIS-Mobile#KDDI
    [36] => SJIS-Mobile#SOFTBANK
    [37] => SJIS-mac
     [38] => SJIS-2004
     [39] => UTF-8-Mobile#DOCOMO
    [40] => UTF-8-Mobile#KDDI-A
    [41] => UTF-8-Mobile#KDDI-B
    [42] => UTF-8-Mobile#SOFTBANK
    [43] => CP932
     [44] => CP51932
     [45] => JIS
     [46] => ISO-2022-JP
     [47] => ISO-2022-JP-MS
     [48] => GB18030
     [49] => Windows-1252
     [50] => Windows-1254
     [51] => ISO-8859-1
     [52] => ISO-8859-2
     [53] => ISO-8859-3
     [54] => ISO-8859-4
     [55] => ISO-8859-5
     [56] => ISO-8859-6
     [57] => ISO-8859-7
     [58] => ISO-8859-8
     [59] => ISO-8859-9
     [60] => ISO-8859-10
     [61] => ISO-8859-13
     [62] => ISO-8859-14
     [63] => ISO-8859-15
     [64] => ISO-8859-16
     [65] => EUC-CN
     [66] => CP936
     [67] => HZ
     [68] => EUC-TW
     [69] => BIG-5
     [70] => CP950
     [71] => EUC-KR
     [72] => UHC
     [73] => ISO-2022-KR
     [74] => Windows-1251
     [75] => CP866
     [76] => KOI8-R
     [77] => KOI8-U
     [78] => ArmSCII-8
     [79] => CP850
     [80] => JIS-ms
     [81] => ISO-2022-JP-2004
     [82] => ISO-2022-JP-MOBILE#KDDI
    [83] => CP50220
     [84] => CP50220raw
     [85] => CP50221
     [86] => CP50222
     [87] => none
     [88] => unknown
     [89] => HTML
     [90] => html
     [91] => qprint
     [92] => binary
     [93] => ISO-10646-UCS-4
     [94] => UCS4
     [95] => ISO-10646-UCS-2
     [96] => UCS2
     [97] => UNICODE
     [98] => utf32
     [99] => utf16
     [100] => utf8
     [101] => utf7
     [102] => ANSI_X3.4-1968
     [103] => iso-ir-6
     [104] => ANSI_X3.4-1986
     [105] => ISO_646.irv:1991
     [106] => US-ASCII
     [107] => ISO646-US
     [108] => us
     [109] => IBM367
     [110] => IBM-367
     [111] => cp367
     [112] => csASCII
     [113] => EUC
     [114] => EUC_JP
     [115] => eucJP
     [116] => x-euc-jp
     [117] => x-sjis
     [118] => SHIFT-JIS
     [119] => eucJP-open
     [120] => eucJP-ms
     [121] => EUC_JP-2004
     [122] => SJIS-open
     [123] => SJIS-ms
     [124] => SJIS-DOCOMO
     [125] => shift_jis-imode
     [126] => x-sjis-emoji-docomo
     [127] => SJIS-KDDI
     [128] => shift_jis-kddi
     [129] => x-sjis-emoji-kddi
     [130] => SJIS-SOFTBANK
     [131] => shift_jis-softbank
     [132] => x-sjis-emoji-softbank
     [133] => MacJapanese
     [134] => x-Mac-Japanese
     [135] => SJIS2004
     [136] => Shift_JIS-2004
     [137] => UTF-8-DOCOMO
     [138] => UTF8-DOCOMO
     [139] => UTF-8-Mobile#KDDI
    [140] => UTF-8-KDDI
     [141] => UTF8-KDDI
     [142] => UTF-8-SOFTBANK
     [143] => UTF8-SOFTBANK
     [144] => MS932
     [145] => Windows-31J
     [146] => MS_Kanji
     [147] => cp51932
     [148] => ISO2022JPMS
     [149] => gb-18030
     [150] => gb-18030-2000
     [151] => cp1252
     [152] => CP1254
     [153] => CP-1254
     [154] => WINDOWS-1254
     [155] => ISO_8859-1
     [156] => latin1
     [157] => ISO_8859-2
     [158] => latin2
     [159] => ISO_8859-3
     [160] => latin3
     [161] => ISO_8859-4
     [162] => latin4
     [163] => ISO_8859-5
     [164] => cyrillic
     [165] => ISO_8859-6
     [166] => arabic
     [167] => ISO_8859-7
     [168] => greek
     [169] => ISO_8859-8
     [170] => hebrew
     [171] => ISO_8859-9
     [172] => latin5
     [173] => ISO_8859-10
     [174] => latin6
     [175] => ISO_8859-13
     [176] => ISO_8859-14
     [177] => latin8
     [178] => ISO_8859-15
     [179] => ISO_8859-16
     [180] => CN-GB
     [181] => EUC_CN
     [182] => eucCN
     [183] => x-euc-cn
     [184] => gb2312
     [185] => CP-936
     [186] => GBK
     [187] => EUC_TW
     [188] => eucTW
     [189] => x-euc-tw
     [190] => CN-BIG5
     [191] => BIG-FIVE
     [192] => BIGFIVE
     [193] => EUC_KR
     [194] => eucKR
     [195] => x-euc-kr
     [196] => CP949
     [197] => CP1251
     [198] => CP-1251
     [199] => WINDOWS-1251
     [201] => CP-866
     [202] => IBM866
     [203] => IBM-866
     [205] => KOI8R
     [207] => KOI8U
     [209] => ArmSCII8
     [210] => ARMSCII-8
     [211] => ARMSCII8
     [213] => CP-850
     [214] => IBM850
     [215] => IBM-850
     [216] => ISO-2022-JP-KDDI
     )
     

    Die Ausgaben sind in 7.0.32 und 7.1.22 identisch. Es war also auch schon vorher falsch und fällt jetzt erst auf, weil der Fix nur in 7.1 und 7,2 eingepflegt wurde, weil 7.0 keinen active support mehr hat. Für 7.1 endet dieser auch Ende diesen Jahres. Insofern sollte die Shopsoftware auch fit für PHP 7.2 gemacht werden.

    Nicht enthalten oder falsch geschrieben sind:

    BIG5 richtig wäre BIG-5 aber wie du schon schriebst ist das auch in GB18030 drin und könnte raus

    BIG5-HKSCS

    GB2312 ist in der erweiterten Ausgabe vorhanden, kann aber auch durch GB10830 ersetzt werden

    SHIFT_JIS ist nicht einzeln enthalten auch nicht in der Alias Liste. Nur mit weiteren Zeichen dahinter. Vielleicht ist das aber das gleiche wie SJIS und kann dadurch ersetzt werden.

    Alles weitere aus der html_encoding.php ist enthalten.

    Gruß Timm

    karsta.de

    • Experte
    • Beiträge: 3.082
    Hallo Timm,
    gut dass es jemanden gibt, der so genau hinschaut.

    Habe das gleich noch einmal in meinen Shops kontrolliert. Dabei ist mir aufgefallen, dass in dem Shop, in dem ich keine Probleme mit den Umlauten habe, ich die update_2.0.4.1_to_2.0.4.2.sql-Datei direkt in der Datenbank ausgeführt hatte.

    Die Shops, die ich per _installer upgedatet habe, haben Umlautprobleme z.B. mit den Bundesländern.
    Deshalb habe ich mal in die Datenbank geschaut, alle Bundesländer mit Sonderzeichen sind auch dort nicht korrekt hinterlegt. Habe nun die update_2.0.4.1_to_2.0.4.2.sql-Datei direkt in der Datenbank ausgeführt und nun sind die Zeichen auch wieder in diesen Shops korrekt.

    Und nach den von Volker vorgeschlagenen Änderungen in der Datei inc/html_encoding.php, sind auch die Umlautfehler in den Mails weg.

    [edit] Muss mich korrigieren. In den Textmails ist es nur weg, wenn diese ohne BOM mit Notepad++ gespeichert wurden.

    BG kgd

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Bei mir ist es in den Texmails nicht mehr falsch, wenn nur das BIG5-HKSCS entfernt wird. Neu abspeichern ohne BOM musste ich es nicht. Zumindest in der Vorschau.  Gesendet hab ich mir die Mails noch nicht angeschaut.

    Auch im 2.0.4.2 Shop meiner Mum sind die Umlaute der Bundesländer richtig. Das Update wurde aber auch noch mit PHP kleiner 7.1.22 gemacht - das kam erst etwas später raus. Und erst dort ist der Fix drin, der anscheinend nicht unterstützte Charsets bemängelt.

    Hast du die Updates vielleicht erst vor kurzem mit PHP 7.1.22 gemacht?

    Umgehen kann man das, wenn man für die Installation auf PHP 7.0.x umstell, weil dort der Fix nicht drin ist.

    Gruß Timm

    karsta.de

    • Experte
    • Beiträge: 3.082
    Nochmal Cache geleert, und stimmt jetzt sind auch die txt-Mails korrekt.
    Ja, einen Shop habe ich vor der PHP 7.1.22 Umstellung upgedatet. Dachte auch erst daran lag es, aber wie gesagt hatte ich in dem Shop die Datenbank-Aktualisierung über phpmyadmin direkt gemacht.

    BG kgd

    Timm

    • Fördermitglied
    • Beiträge: 6.343
    Da nicht alle Hoster in phpmyadmin zulassen, dass man die komplette 2.0.4.1 zu 2.0.4.2 sql Datei nachträglich durchlaufen lässt (soll wohl zu lang sein beim einen und beim anderen gings) und man die Umlautfehler in den Bundesländern und den Händlergruppen unter php 7.1 bekommt, kann ich euch beim update nur raten vorher auf php 7.0 umzustellen. Dann sind die Umlaute in Bundesländern und Händlergruppen auch korrekt und ihr spart euch extra Arbeit.

    Gruß Timm
    2 Antworten
    1719 Aufrufe
    05. Juni 2016, 08:41:34 von Fakrae
    0 Antworten
    1740 Aufrufe
    07. Dezember 2012, 14:54:42 von frankbackes
    7 Antworten
    3878 Aufrufe
    22. März 2018, 12:42:57 von goair
    3 Antworten
    2712 Aufrufe
    15. Mai 2012, 13:15:10 von Matt
               
    anything