Umlaute in Tabelle "con_code" werden als "?" angezeigt --> charset / encoding Problem?

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
lukelukeluke
Beiträge: 2
Registriert: Do 7. Jan 2016, 09:46
Kontaktdaten:

Umlaute in Tabelle "con_code" werden als "?" angezeigt --> charset / encoding Problem?

Beitrag von lukelukeluke » Mi 23. Sep 2020, 07:49

Hallo zusammen

Habe folgendes Problem: Seit meine Contenido-Webseite auf einen neuen Server gezügelt wurde, werden Sonderzeichen jetzt als "?" angezeigt. Ich denke das liegt wohl an einer anderen MySQL oder anderen PHP Konfiguration:
Das Problem scheint beim Erstellen der Einträge in Tabelle con_code zu liegen (das passiert ja noch vor einer Anzeige in Apache): Wenn ich ein DB-Backup vom alten Server einlese, steht (bei Betrachtung in PHPMyAdmin) im Inhalt für ein "ü" in con_code noch ein "ü". Wenn ich dann con_code leere und die Seite erneut betrachte, steht im neuen Eintrag in con_code statt ein "ü" dann ein "?".

Habe schon Sachen probiert wie in functions.general.php folgendes hinzuzufügen:

Code: Alles auswählen

$res = @ mysqli_connect($contenido_host, $contenido_user, $contenido_password);	
$res->set_charset('latin1') or die($res->error." in ".basename(__FILE__)." on line ".__LINE__);
resp.:

Code: Alles auswählen

$res = @ mysql_connect($contenido_host, $contenido_user, $contenido_password);
mysql_query("SET NAMES 'iso-8859-1'");
Habe mit mysql und mysqli probiert, beides ohne Erfolg.

Auf dem Server läuft PHP 5.4.60. Habe die PHP-Option "default_charset" auf "iso-8859-1" gewechselt (von UTF-8), ebenfalls ohne Erfolg.
(in MySQL sind sämtliche Tabellen resp. Spalten auf Encoding "latin1_swedish_ci" eingestellt.

Leider reicht mein Budget nicht um auf eine neue Version zu aktualisieren (habe 4.8.3...ja ich bin im 4.9 Forum weil das andere Forum offensichtlich nicht mehr besucht wird). Ich hoffe hier kann mir trotzdem wer helfen! Welche Webserver-Einstellungen von MySQL / PHP beeinflussen hier das Erstellen der Einträge in con_code? Vielen Dank!

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Umlaute in Tabelle "con_code" werden als "?" angezeigt --> charset / encoding Problem?

Beitrag von xmurrix » Mi 23. Sep 2020, 09:10

Hallo lukelukeluke,

willkommen im CONTENIDO Forum.

Ich hätte nicht gedacht, dass Contenido 4.8.3 noch im Einsatz ist...

Vermutlich ist die DB-Verbindung nicht mit dem richtigen Zeichensatz. In der functions.general.php wird nur geprüft, ob eine DB-Verbindung aufgebaut werden kann.
Den Zeichensatz der Datenbankverbindung würde ich in conlib/db_mysql.inc oder in conlib/db_mysqli.inc kurz nach der Erstellung der Verbindung in der Funktion connect() mit mysql_set_charset() oder mysqli_set_charset() setzen. Je nach dem ob du mysql oder mysqli verwendest, sind das die Scripte, in denen man den Zeichensatz der DB-Verbindung setzen sollte.

Wenn die Datenbankverbindung und PHP mit gleichem Zeichensatz arbeiten, sollte es funktionieren.

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

lukelukeluke
Beiträge: 2
Registriert: Do 7. Jan 2016, 09:46
Kontaktdaten:

Re: Umlaute in Tabelle "con_code" werden als "?" angezeigt --> charset / encoding Problem?

Beitrag von lukelukeluke » Mi 23. Sep 2020, 13:33

Hallo xmurrix
Super, danke für die schnelle und gute Hilfe! Mit dem mysql_set_charset in conlib/db_mysql.inc hats funktioniert!:

Code: Alles auswählen

function connect(...) {
    //...
    mysql_set_charset("latin1");
    return $this->Link_ID;
}
Nach leeren von con_code wird nun alles korrekt dargestellt.
PS: Habe herausgefunden, dass ich in der php.ini den Parameter default_charset auf "UTF-8" lassen kann oder aber auf "iso-8859-1" umstellen kann, in beiden Fällen wird mir nach leeren von con_code alles korrekt dargestellt. Habe diesen also nun auf dem Server default UTF-8 belassen und einfach das latin1 für die MySQL Verbindung mitgegeben.
Gruss

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Umlaute in Tabelle "con_code" werden als "?" angezeigt --> charset / encoding Problem?

Beitrag von xmurrix » Mi 23. Sep 2020, 14:14

lukelukeluke hat geschrieben:
Mi 23. Sep 2020, 13:33
...Habe herausgefunden, dass ich in der php.ini den Parameter default_charset auf "UTF-8" lassen kann oder aber auf "iso-8859-1" umstellen kann, in beiden Fällen wird mir nach leeren von con_code alles korrekt dargestellt...
Ab PHP 5.4 ist das interne Encoding auf UTF-8 geändert. Wenn du Daten mit einem anderen Zeichensatz hast, musst du damit rechnen, dass manche String-Funktionen in PHP kaputte Texte erzeugen können. Dazu zählen die Funktionen htmlspecialchars(), html_entity_decode(), htmlentities() usw., siehe auch Datei contenido/includes/functions.php54.php in neueren CONTENIDO-Versionen. Vermutlich werden keine dieser Funktionen beim Generieren des Codes der Seite verwendet, dafür aber an anderen Stellen. Daher würde ich auch den default_charset auf "iso-8859-1" umstellen.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Antworten