Page 1 of 2

Emoji

Posted: Sat Jan 18, 2025 5:10 pm
by MarioH
Hallo zusammen, ich muss mal ein altes Thema hoch holen.
Ich habe die Datenbank meines Blogs auf utf8-mb4 umgestellt. Wenn ich in einem Beitrag mittels Copy-Paste ein Emoji einfüge, wird es nach dem Speichern durch 4 '?' ersetzt.
Gibt es da Abhilfe?

Viele Grüße
Mario

Re: Emoji

Posted: Thu Jan 23, 2025 11:55 pm
by onli
Hi Mario
Du hast geschaut, dass die serendipity_entries-Datenbanktabelle tatsächlich umgestellt wurde? Ebenso die Tabelle serendipity_entryproperties, falls dessen Cache an ist?

Ich könnte mir sonst nur vorstellen, dass dir da ein Markupplugin reinpfuscht. Du hattest Textile in Benutzung?

Re: Emoji

Posted: Thu Jan 30, 2025 10:57 pm
by MarioH
Hi, nein ich habe textile nicht in Benutzung. Interessant ist, dass die Emojis beim erstellen des Beitrags (nicht veröffentlicht) auch nach dem Speichern und in der Vorschau noch zu sehen sind. Erst nachdem ich den Post verlasse und neu aufrufe, sind die Emoji weg.
Ansonsten habe ich s9ymarkup und nl2br (nur in den Kommentaren) an.
Wir prüfe ich am besten, ob die Tabellen richtig umgestellt sind?

Gruß
Mario

Re: Emoji

Posted: Thu Jan 30, 2025 11:31 pm
by onli
Hm, eventuell der Cache des entryproperties-Plugin?

Zum Anzeigen, für mich wäre das Anzeigen im mysql-Client am einfachsten, mit

Code: Select all

show create table serendipity_entries;
bzw

Code: Select all

show create table serendipity_entryproperties;

Re: Emoji

Posted: Fri Jan 31, 2025 4:50 pm
by MarioH
Sieht eigentlich gut aus.

Code: Select all

CREATE TABLE `serendipity_entries` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
 `timestamp` int(10) unsigned DEFAULT NULL,
 `body` longtext COLLATE utf8mb4_unicode_ci,
 `comments` int(4) unsigned DEFAULT '0',
 `trackbacks` int(4) unsigned DEFAULT '0',
 `extended` longtext COLLATE utf8mb4_unicode_ci,
 `exflag` int(1) DEFAULT NULL,
 `author` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
 `authorid` int(11) DEFAULT NULL,
 `isdraft` enum('true','false') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'true',
 `allow_comments` enum('true','false') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'true',
 `last_modified` int(10) unsigned DEFAULT NULL,
 `moderate_comments` enum('true','false') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'true',
 PRIMARY KEY (`id`),
 KEY `date_idx` (`timestamp`),
 KEY `mod_idx` (`last_modified`),
 KEY `edraft_idx` (`isdraft`),
 KEY `eauthor_idx` (`authorid`),
 FULLTEXT KEY `entry_idx` (`title`,`body`,`extended`)
) ENGINE=InnoDB AUTO_INCREMENT=600 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
und

Code: Select all

CREATE TABLE `serendipity_entryproperties` (
 `entryid` int(11) NOT NULL DEFAULT '0',
 `property` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
 `value` longtext COLLATE utf8mb4_unicode_ci,
 UNIQUE KEY `prop_idx` (`entryid`,`property`),
 KEY `entrypropid_idx` (`entryid`),
 FULLTEXT KEY `fulltext_idx` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC

Re: Emoji

Posted: Fri Jan 31, 2025 5:53 pm
by onli
Ja, hmpf. Ich sehe da keinen Fehler.

Wenn niemand sonst eine Idee hat: Ich würde jetzt Debugausgaben einbauen. Z.B. in der include/function_entries.inc.php in der Funktion serendipity_updertEntry. Zeile 1450, mache aus:

Code: Select all

$res = serendipity_db_insert('entries', $entry);
ein

Code: Select all

echo "<pre>";
print_r($entry);
echo "</pre>";
$res = serendipity_db_insert('entries', $entry);
und Zeile 1514 aus

Code: Select all

$res = serendipity_db_update('entries', array('id' => $entry['id']), $entry);
ein

Code: Select all

echo "<pre>";
print_r($entry);
echo "</pre>";
$res = serendipity_db_update('entries', array('id' => $entry['id']), $entry);
Dann nochmal einen Testeintrag anlegen und schauen, was beim Speichern ausgegeben wird.

Re: Emoji

Posted: Sat Feb 01, 2025 8:54 am
by MarioH
Ich habe folgendes noch getestet. Ich habe in die Datenbank direkt ein Emoji eingefügt, das sieht dort dann so aus:

Code: Select all

<p>Los geht es in die ersten Tage des neuen Jahres.</p>

<ul>
	<li>🏃🏼‍♂️ In dieser Woche gab es auch wieder Laufrunden</li>
	<li>Diese Podcastaufnahmen &auml;&ouml;&uuml;&szlig; ????</li>
</ul>
Und wenn ich dann den Eintrag im Blog im Editor öffne, kommt sofort:

Code: Select all

Los geht es in die ersten Tage des neuen Jahres.

    ??‍♂️ In dieser Woche gab es auch wieder Laufrunden
    Diese Podcastaufnahmen äöüß ????
Das gleiche passiert, wenn ich das Emoji bei einem veröffentlichten Beitrag in der DB einfüge und den Eintrag aufrufe, dann wird das auch so angezeigt.

Kann das an

Code: Select all

<meta charset="UTF-8">
im Header der Seite liegen?

Re: Emoji

Posted: Sat Feb 01, 2025 10:41 am
by onli
Gute Idee! Das bedeutet, dass selbst wenn die Daten richtig in der Datenbank landen beim späteren Abruf oder Anzeigen im Browser etwas schiefgeht.
MarioH wrote: Sat Feb 01, 2025 8:54 amKann das an

Code: Select all

<meta charset="UTF-8">

im Header der Seite liegen?
Grundsätzlich könnte es an einem falschen Charset an der Stelle liegen, aber UTF-8 ist korrekt.

Wir könnten jetzt Debugausgaben an der Stelle hinzufügen, an der Eintrag aus der Datenbank geholt wird und schauen, ob er dann erstmal noch stimmt. Ich würde immer noch auf ein Plugin tippen. Weißt du wo?

Re: Emoji

Posted: Sat Feb 01, 2025 11:51 am
by MarioH
würde immer noch auf ein Plugin tippen. Weißt du wo?
Wo sollen wir mit den Debug-Ausgaben anfangen. So richtig weiß ich nicht, wo da was passiert.

Wenn ich ein Plugin zu Testzwecken deaktiviere, wirkt sich das sofort aus oder muss ich den Cache danach immer leeren?

Re: Emoji

Posted: Sat Feb 01, 2025 12:02 pm
by onli
Den musst du leeren. Vor allem würde ich den Cache für diesen Test deaktivieren. Kann ja auch daher kommen.

Ich liefer die Debugstellen nachher nach (sonst meld dich nochmal hier bitte).

Re: Emoji

Posted: Sat Feb 01, 2025 6:22 pm
by onli
Probier mal hier: include/functions_entries.inc.php, in der serendipity_fetchEntry, Zeile 633 steht:

Code: Select all

$ret =& serendipity_db_query($querystring, true, 'assoc');
Bitte ersetze das mit:

Code: Select all

$ret =& serendipity_db_query($querystring, true, 'assoc');
echo "<pre>";
print_r($ret);
echo "</pre>";
Kommt dann eine Ausgabe, wenn du den Eintrag aufrufst? Enthält die den Smiley?

Re: Emoji

Posted: Sat Feb 01, 2025 6:29 pm
by MarioH
Ausgabe kommt, aber auch da wird der Smiley nicht angezeigt bzw. so:

Code: Select all

meiner Laufsaison ??‍♂️ in den vergangenen

Re: Emoji

Posted: Sat Feb 01, 2025 6:38 pm
by MarioH
Ist dieser Eintrag für den Charset in der Datenbank-Tabelle serendipity_config richtig?

Code: Select all

charset 	UTF-8/

Re: Emoji

Posted: Sat Feb 01, 2025 6:40 pm
by onli
Ok, dann hängt es nicht an einem Plugin.

Es gibt in der include/db/mysqli.inc.php in Zeile 258 diesen Codeblock:

Code: Select all

    if ($use_charset != '') {
        mysqli_set_charset($serendipity['dbConn'], $use_charset);
    }
Mach daraus bitte mal

Code: Select all

    if ($use_charset != '') {
         echo "charset";
        echo $use_charset;
        mysqli_set_charset($serendipity['dbConn'], $use_charset);
    }
Genau die Richtung deines letzten Posts: Vielleicht läuft die Verbindung noch mit UTF-8 statt utf8mb4 und das isst den Smiley?

Edit: Das $use_charset hier sollte aus deiner serendipity_config_local.inc.php kommen, als $serendipity['dbCharset'].

Re: Emoji

Posted: Sat Feb 01, 2025 7:12 pm
by MarioH
Die Variable gibt es in meiner serendipity_config_local.inc.php nicht. Ich füge sie mal ein.