Emoji
Emoji
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
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
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?
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
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
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
Hm, eventuell der Cache des entryproperties-Plugin?
Zum Anzeigen, für mich wäre das Anzeigen im mysql-Client am einfachsten, mit
bzw
Zum Anzeigen, für mich wäre das Anzeigen im mysql-Client am einfachsten, mit
Code: Select all
show create table serendipity_entries;Code: Select all
show create table serendipity_entryproperties;Re: Emoji
Sieht eigentlich gut aus.
und
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=DYNAMICCode: 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=DYNAMICRe: Emoji
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:
ein
und Zeile 1514 aus
ein
Dann nochmal einen Testeintrag anlegen und schauen, was beim Speichern ausgegeben wird.
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);Code: Select all
echo "<pre>";
print_r($entry);
echo "</pre>";
$res = serendipity_db_insert('entries', $entry);Code: Select all
$res = serendipity_db_update('entries', array('id' => $entry['id']), $entry);Code: Select all
echo "<pre>";
print_r($entry);
echo "</pre>";
$res = serendipity_db_update('entries', array('id' => $entry['id']), $entry);Re: Emoji
Ich habe folgendes noch getestet. Ich habe in die Datenbank direkt ein Emoji eingefügt, das sieht dort dann so aus:
Und wenn ich dann den Eintrag im Blog im Editor öffne, kommt sofort:
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
im Header der Seite liegen?
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 äöüß ????</li>
</ul>Code: Select all
Los geht es in die ersten Tage des neuen Jahres.
??♂️ In dieser Woche gab es auch wieder Laufrunden
Diese Podcastaufnahmen äöüß ????Kann das an
Code: Select all
<meta charset="UTF-8">Re: Emoji
Gute Idee! Das bedeutet, dass selbst wenn die Daten richtig in der Datenbank landen beim späteren Abruf oder Anzeigen im Browser etwas schiefgeht.
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?
Grundsätzlich könnte es an einem falschen Charset an der Stelle liegen, aber UTF-8 ist korrekt.MarioH wrote: Sat Feb 01, 2025 8:54 amKann das an
Code: Select all
<meta charset="UTF-8">
im Header der Seite liegen?
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
Wo sollen wir mit den Debug-Ausgaben anfangen. So richtig weiß ich nicht, wo da was passiert.würde immer noch auf ein Plugin tippen. Weißt du wo?
Wenn ich ein Plugin zu Testzwecken deaktiviere, wirkt sich das sofort aus oder muss ich den Cache danach immer leeren?
Re: Emoji
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).
Ich liefer die Debugstellen nachher nach (sonst meld dich nochmal hier bitte).
Re: Emoji
Probier mal hier: include/functions_entries.inc.php, in der serendipity_fetchEntry, Zeile 633 steht:
Bitte ersetze das mit:
Kommt dann eine Ausgabe, wenn du den Eintrag aufrufst? Enthält die den Smiley?
Code: Select all
$ret =& serendipity_db_query($querystring, true, 'assoc');Code: Select all
$ret =& serendipity_db_query($querystring, true, 'assoc');
echo "<pre>";
print_r($ret);
echo "</pre>";Re: Emoji
Ausgabe kommt, aber auch da wird der Smiley nicht angezeigt bzw. so:
Code: Select all
meiner Laufsaison ??♂️ in den vergangenenRe: Emoji
Ist dieser Eintrag für den Charset in der Datenbank-Tabelle serendipity_config richtig?
Code: Select all
charset UTF-8/Re: Emoji
Ok, dann hängt es nicht an einem Plugin.
Es gibt in der include/db/mysqli.inc.php in Zeile 258 diesen Codeblock:
Mach daraus bitte mal
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'].
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);
}Code: Select all
if ($use_charset != '') {
echo "charset";
echo $use_charset;
mysqli_set_charset($serendipity['dbConn'], $use_charset);
}Edit: Das $use_charset hier sollte aus deiner serendipity_config_local.inc.php kommen, als $serendipity['dbCharset'].
Re: Emoji
Die Variable gibt es in meiner serendipity_config_local.inc.php nicht. Ich füge sie mal ein.