Hallo,
bei der Bankdaten-Aktualisierung (Adminbereich) mit den
BLZ-Daten der Bundesbank ist mir heute aufgefallen, dass die die Zeichenkodierung der txt-Dateien von
Latin auf UTF-8 umgestellt haben.
update 11.08.2019 -----------------------Diese Umstellung wurde zwischenzeitlich zurückgenommen, die txt-Dateien sind wie früher wieder Latin-kodiert. Wer meine vorgeschlagenen Änderungen übernommen hatte, bitte zurückbauen, sonst fehlen BLZ in der DB. Mit der 2019-Juni-Sep-Datei und mb_substr bekommt man bspw nur 3386 statt 3550 BLZ.
ende update 11.08.2019 ------------------Das hat den Effekt, dass ca 1/3 aller Sätze nicht importiert werden, gut 1000 weniger als bisher! Das wiederum führt dazu, dass
im SEPA-Modul viele IBANs fälschlicherweise abgelehnt werden, aber längst nicht alle, deshalb bemerkt man das zunächst nicht. Es müssen aktuell nach dem Import der
txt-Datei vom 4.3.2019 3549 Sätze da sein, wenn ihr eine 2000er Zahl angezeigt bekommt, habt ihr nicht alle.
Alle Shopversionen sind betroffen.
Grund: Die txt-Datei der Bundesbank ist eine Festformat-Datei, Daten werden aus den Zeilen über Zeichenpositionen in einer Zeile extrahiert. Die
admin/blz_update.php verwendet dafür die Funktion
substr, und die geht davon aus, dass eine Position ein Zeichen bedeutet. Was bei UTF-8 nicht immer so ist, Umlaute bspw sind 2 oder mehr Zeichen breit. Entsprechend verschieben sich die Positionen in vielen Zeilen, und dort greift insbesondere die Ermittlung des Übernahmekennzeichens am Ende einer Zeile, Position 158, daneben und bekommt statt D, U, A oder M eine Zahl. Es werden aber nur Sätze mit U, A, oder M übernommen.
Kurzfristige Abhilfe, bis es einen offiziellen Patch gibt:
Sucht die Vorkommen von
substr in
admin/blz_update.php und ersetzt sie durch
mb_substr, ca Zeile 106 bis 110. Bei der Ersetzung von substr durch mb_substr muss außerdem bei jedem mb_substr hinten ein vierter Parameter 'UTF-8' rein. Dh bspw, aus
vorher so
$blz['blz'] = substr($line, 0, 8); wird
$blz['blz'] = mb_substr($line, 0, 8, 'UTF-8'); Damit werden zumindest wieder alle Banken importiert.
bankname braucht besondere Aufmerksamkeit, damit er nicht mit kaputten Umlauten in der Datenbank landet. Die Änderung ist abhängig davon, wie alt euer shop ist (hat er decode_utf8 in inc/html_encoding.php) und welche Zeichenkodierung eure DB verwendet:
Neuere shops mit decode_utf8bisher:
$blz['bankname'] = encode_utf8
(trim(substr($line, 9, 58)), 'ISO-8859-15'); //bank name(58) neu:
$blz['bankname'] = decode_utf8
(trim(mb_substr($line, 9, 58, 'UTF-8'))); Ältere shops ohne decode_utf8bisher
$blz['bankname'] = trim(substr($line, 9, 58)); //bank name(58) neu, shop in Latin:
neu, shop in UTF-8:
Falls ihr die Bankdaten bereits aktualisiert hattet, baut um und importiert erneut, ihr könnt gefahrlos so oft
importieren, wie ihr wollt.
Grüße, Volker
Linkback: https://www.modified-shop.org/forum/index.php?topic=40086.0