Falsche Codierung des Datums in Artikeln (UTF-8 statt ISO-8859-1)

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
Wile E. Coyote
Posts: 2
Joined: Fri Mar 15, 2024 5:28 pm

Falsche Codierung des Datums in Artikeln (UTF-8 statt ISO-8859-1)

Post by Wile E. Coyote »

Hallo,

ich habe hier eine sehr sehr (sehr) alte Installation, die aus historischen Gründen, an die sich niemand mehr erinnern kann, in der Datenbank ISO-8859-1 verwendet. Dementsprechend ist das Blog selber auch auf ISO eingestellt und die Umlaute in den Einträgen kommen auch ganz hervorragend und wie gewollt raus.

Nach dem Update auf s9y 2.5.0 und PHP 8.2 spuckt die Datums-Funktion jetzt allerdings am Kopf jedes Artikels (und auch in der Archiv-Übersicht) ein "März" statt "März" aus, sie versucht also offenbar UTF-8 zu generieren, was zum Rest der Seite nicht passt. Nach einigem Hin und Her habe ich die Funktion serendipity_smarty_formatTime() in der /include/functions_smarty.inc.php ausgemacht, die diesen String entsprechend formatieren soll und habe der einfach ein mb_convert_encoding() am Ende verpasst, ohne auf meinen Arzt oder Apotheker zu hören, und nehme die möglichen Nebenwirkungen in Kauf. ;-)

Sieht jetzt so aus:
function serendipity_smarty_formatTime($timestamp, $format, $useOffset = true, $detectTimestamp = false, $useDate = false) {
if ($detectTimestamp !== false && stristr($detectTimestamp, 'date') === false) {
$out = $timestamp;
} else {
if (defined($format)) {
$out = serendipity_formatTime(constant($format), $timestamp, $useOffset, $useDate);
} else {
$out = serendipity_formatTime($format, $timestamp, $useOffset, $useDate);
}
}
return mb_convert_encoding($out, 'ISO-8859-1', 'UTF-8');
}
Die eigentlichen Fragen dazu: Liegt das an mir und meiner sehr sehr extrem sehr alten Installation, die aus einer Zeit stammt, als die Versionsnummern noch mit 0 begannen? Liegt es an den Server-Einstellungen (auf die ich keine Einfluss habe)? Sollte die Software das automatisch korrekt anhand der eingestellten Ausgabe-Konfiguration machen und es wurde nur vergessen? Bin ich der Einzige mit dem Problem? Fragen über Fragen... ;-)
onli
Regular
Posts: 2830
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Falsche Codierung des Datums in Artikeln (UTF-8 statt ISO-8859-1)

Post by onli »

Ja, das könnte ein Fehler in 2.5 sein. serendipity_strftime nutzt jetzt PHP81_BC\strftime. Es könnte sein, dass da immer UTF-8 rauskommt und das vorher nicht so was, wir daher das umwandeln müssen - ziemlich so wie du gemacht hast.

Ich würde es vll in die serendipity_strftime packen, in der include/functions.inc.php. Da am Ende steht, Zeile 163:

Code: Select all

    return $out;
Mach daraus doch bitte ein:

Code: Select all

    return mb_convert_encoding($out, LANG_CHARSET, 'UTF-8');
Wenn es dann auch geht, wenn du deine Änderung in serendipity_smarty_formatTime rückgängig macht, dann wäre es total toll wenn du das als Pull Request in unserem Github einbringen könntest.

Mein Alternativvorschlag wäre: Stell den Blog auf UTF-8 um. Mach vorher ein Backup der Datenbank, dann ändere die Konfiguration in Serendipity. Wenn die Umlaute kaputt sind und du MySQL benutzt, gehe in deine Datenbankverwaltung und ändere alle Tabellen so:

Code: Select all

ALTER TABLE ... ENGINE=InnoDB;
ALTER TABLE ... ROW_FORMAT=DYNAMIC;
ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Wenn danach die Umlaute kaputt sind, kannst du sie in der Datenbank ersetzen: Kopier z.B. dir das dann falsch dargstellte ü und ersetze es mit einem regulären UTF-8-ü.
Wile E. Coyote
Posts: 2
Joined: Fri Mar 15, 2024 5:28 pm

Re: Falsche Codierung des Datums in Artikeln (UTF-8 statt ISO-8859-1)

Post by Wile E. Coyote »

Jupp, habe mich heute morgen noch mal damit beschäftigt und auch die LANG_CHARSET gefunden und dementsprechend meinen Code da oben in der letzten Zeile verändert:
if (LANG_CHARSET != "UTF-8") $out = mb_convert_encoding($out, LANG_CHARSET, 'UTF-8');
return $out;
Das schien mir dann auch etwas sauberer, als einfach immer die komplette Ausgabe der Funktion nach ISO 8859-1 zu konvertieren. ;-) Aber in der functions.inc.php ist das wahrscheinlich tatsächlich besser aufgehoben, ich werde das sofort mal testen!

Pull-Request kann ich gerne machen, sobald ich raus habe, wie ich das hin kriege. Ich habe seit Jahren kein git mehr benutzt! Aber es gibt ja scheinbar heutzutage ein Web-Interface für alles... :D

Die Datenbank mal in UTF umzuwandeln, wäre natürlich auch mal eine Maßnahme. Da habe ich aber ein kleines Bisschen Angst davor, weil die aus unerfindlichen Gründen gar nicht auf Deutsch sondern auf Schwedisch steht?!? Ich nehme an, das ist mal bei irgendeinem Server-Umzug falsch ex- oder importiert worden und ich fasse das lieber nicht an, solange es auch so geht! Wie gesagt, das ist sehr sehr alt! ;-)
onli
Regular
Posts: 2830
Joined: Tue Sep 09, 2008 10:04 pm
Contact:

Re: Falsche Codierung des Datums in Artikeln (UTF-8 statt ISO-8859-1)

Post by onli »

Hab den PR gesehen. Super, Danke :) Ich geb den anderen (insb Garvin) etwas Zeit sich das anzusehen, ansonsten teste ich das auf einem UTF-8-System gegen und merge dann.
Post Reply