[Bug?] Probleme mit türkischer Sprache

Fragen zur Installation von CONTENIDO 4.9? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

[Bug?] Probleme mit türkischer Sprache

Beitrag von homtata » Mi 13. Nov 2013, 12:40

Hallo Gemeinde,

in meinem Mandanten (CON 4.9.2, mehrere Sprachen) ist die Enkodierung für alle Sprachen auf utf8 gesetzt unter Administration/Sprachen.

In Türkisch gibt es nun Probleme, wenn man Text in die HTML-Container eingibt.

Code: Alles auswählen

Zemin katta aydınlık, sigara içilmeyen apart daire, oturma/yatak odası (2 x 0,90m x 2,00m yatak), duş/WC, yemek/çalışma odası, 2 ocaklı Kitchenette, kablo TV, highspeed DSL internet bağlantısı
wird

Code: Alles auswählen

Zemin katta ayd?nl?k, sigara içilmeyen apart daire, oturma/yatak odas? (2 x 0,90m x 2,00m yatak), du?/WC, yemek/çal??ma odas?, 2 ocakl? Kitchenette, kablo TV, highspeed DSL internet ba?lant?s?
Hat jemand einen Ansatzpunkt, wo das hakt? Das wird sich dann ja unter Umständen mit der nächsten Sprache (französisch) auch nicht besser ausgehen...
Es ist übrigens kein Schriftartenproblem - das passiert auch, wenn für alle Elemente font-family: Arial gesetzt ist...

LG
Zuletzt geändert von homtata am Fr 15. Nov 2013, 10:12, insgesamt 1-mal geändert.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von Faar » Mi 13. Nov 2013, 14:40

Das Dokument oder genauer, die Datei in der das Eingabeformular sich befindet, ist wahrscheinlich nicht als UTF-8 abgespeichert worden.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von homtata » Do 14. Nov 2013, 00:23

Hallo Faar,
nein, das ist definitiv nicht das Problem. Der Fehler taucht auch beim Umbenennen von Kategorien auf, und da kanns nun gar nicht an der Codierung liegen, weil ja nur unformatierter Text eingegeben wird.
Selbst WENN ich die Texte vorher in einen Editor gebe und dort das Encoding auf UTF8 umstelle und dann von dort aus wieder den Text kopiere, ändert das nichts - die Fehler bleiben bestehen...

Nachtrag: selbst wenn ich versuche, das Sonderzeichen direkt in die Datenbanktabelle einzufügen, wird es in ein Fragezeichen umgewandelt... Es nützt auch nix, wenn ich die Kollation dieser Tabelle auf utf8_general ändere. Ich versteh grad die Welt nicht.

LG

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

Re: Probleme mit türkischer Sprache

Beitrag von xmurrix » Do 14. Nov 2013, 07:54

Morgen zusammen,

@homtata:
Schau dir mal folgenden Beitrag an, da gab es auch beim Speichern von Layouts Probleme:
http://forum.contenido.org/viewtopic.ph ... 8&p=159921

Läuft bei dir vielleicht eine PHP Version, die kleiner als 5.4 ist?
Falls ja, dann werden Funktionen wie htmlspecialchars(), htmlentities() usw. mit dem default-Encoding ISO-8859-1 verarbeitet.

Ab PHP 5.4 ist es auf UTF-8 umgestellt.

Beim Speichern von Inhalten im Backend werden diese meist durch die Funktionen in der contenido/includes/functions.php54.php verarbeitet. Diese Funktionen werden meines wissens ohne den Encoding-Parameter aufgerufen und verwenden daher das default-Encoding in PHP...

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.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von homtata » Do 14. Nov 2013, 08:52

Hallo Murat,

ja, an diesem anderen Thread hatte ich ja auch mitgewerkelt, lustigerweise für genau diesen Kunden ;-) Das heißt: die von dir genannten Werte in

Zeichensatz der Sprache im Backend "ISO-8859-1"
Zeichensatz der Datenbankverbindung "latin1" (siehe Konfiguration für Datenbankverbindungsparameter in data/config/production/config.php)
Standard Zeichensatz der Ausgabe in PHP "ISO-8859-1" (siehe PHP Konfiguration $cfg['php_settings']['default_charset'] in data/config/production/config.misc.php)

sind alle schon angepasst gewesen. In der deutschen Sprache sind die Sonderzeichen auch kein Problem, sowohl über Contenido als auch die Datenbank selbst kann ich Umlaute eingeben, die auch im Klartext gespeichert werden, nur halt nicht diese blöden türkischen Sonderzeichen. Die klappen weder in Contenido noch in der Datenbank selbst.
Die Datenbankverbindung in phpMyAdmin zeigt als Kollation latin_german2_ci, ebenso die meisten Tabellen. Das Umstellen der TABELLE con_Cat_lang auf utf-8 brachte wie gesagt auch keine Besserung. Es wundert mich, dass das Sonderzeichen auf der DB-Ebene schon nicht genommen wird...

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

Re: Probleme mit türkischer Sprache

Beitrag von xmurrix » Do 14. Nov 2013, 09:21

...Zeichensatz der Sprache im Backend "ISO-8859-1"...
Nicht alle türkischen Zeichen können mit ISO-8859-1 dargestellt werden, das solltest du anpassen...

Welche PHP-Version läuft denn bei dir?
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.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von homtata » Do 14. Nov 2013, 10:46

Hallo Murat,

sorry, da hatte ich mich vertippt und einen Text falsch kopiert.
Die Zeichensätze stehen immer schon überall auf UTF8, also wie folgt:

Zeichensatz der Sprache im Backend "utf8"
Zeichensatz der Datenbankverbindung "utf8" (siehe Konfiguration für Datenbankverbindungsparameter in data/config/production/config.php)
Standard Zeichensatz der Ausgabe in PHP "UTF-8" (siehe PHP Konfiguration $cfg['php_settings']['default_charset'] in data/config/production/config.misc.php)

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von homtata » Do 14. Nov 2013, 13:56

So, ich bin der Sache auf der Spur, halte das aber für eine schwere "Unschönheit":

Es machte mich stutzig, dass die Eingabe in der Datenbank selbst nicht klappt.
Der Fehler liegt jetzt darin, dass nicht nur die Datenbanktabelle eine Kollation hat (oft latin1_german2_ci), sondern die TabellenSPALTEN auch noch. Und das ist z.B. bei "name" in con_cat_lang der Fall oder in con_content die Spalte "value".
Solange hie spaltenbezogen die Kollation nicht auf "utf8_general_ci" umgestellt wird, gehen etliche Sonderzeichen verloren - nach der Umstellung klappts. Nun scheint sich das aber nur bei bestimmten Tabellen und Spalten auszuwirken - z.B. klappt die Modulübersetzung ohne weitere Anpassung der Datenbankkollationen!

Scheinbar werden diese Kollationen so aber auch bei einer Neuinstallation von Contenido auf latin_ angelegt, und das führt bei bestimmten Sprachen dann unweigerlich zu Problemen!
Könnt Ihr da nochmal reinschauen?

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von Faar » Do 14. Nov 2013, 15:09

homtata hat geschrieben:Hallo Faar,
nein, das ist definitiv nicht das Problem.
Sicher?
Der Fehler taucht auch beim Umbenennen von Kategorien auf, und da kanns nun gar nicht an der Codierung liegen, weil ja nur unformatierter Text eingegeben wird.
Wenn die Datei, die das Formularfeld für "das Umbenennen von Kategorien" darstellt, nicht auch als utf-8 Format gespeichert wurde, dann funktioniert das nicht richtig.
Selbst WENN ich die Texte vorher in einen Editor gebe und dort das Encoding auf UTF8 umstelle und dann von dort aus wieder den Text kopiere, ändert das nichts - die Fehler bleiben bestehen...
Ja eben, es spielt da keine Rolle, ob du es irgendwo als utf-8 eingestellt hast, wenn das Formular-Dokument mit dem das Zeichen abgesendet wird, nicht selbst utf-8 ist.
Du kannst inzwischen selbst beim Windows Standardeditor eine Textdatei als Ansi oder UTF-8 abspeichern. Damit ist das Dokument selbst auch als utf-8 codiert.
Der Witz ist nämlich, dass das Programm davon ausgeht, dass es Ansi ist, wenn du ein Zeichen von einem Ansi-Dokument übernimmst.

Schaust du in Wordpress-Datenbanken rein, wirst du sehen, dass dort die Kollation auch auf irgendwas steht, aber nicht auf utf-8, das spielt dabei keine Rolle.
Warum?
Weil die UTF-8 Ersatzzeichen (diese Hiroglyphen) in der Datenbank stehen, die mit Ansi angezeigt werden können.
Gibst du so ein Zeichen dann wieder als utf-8 aus, wie in Webseiten, dann wird auch das richtige Zeichen dargestellt und nicht mehr das Ersatzzeichen.
Nachtrag: selbst wenn ich versuche, das Sonderzeichen direkt in die Datenbanktabelle einzufügen, wird es in ein Fragezeichen umgewandelt...
Das geht nicht, weil die Formularmaske, wo du das utf-8 Zeichen einträgst, nicht utf-8 ist. Es ist Ansi oder sonstwas westliches, daher wird der Datenbank selbst dann gesagt, es wäre ein Ansi Zeichen, was da kommt.
Und weil Ansi kein echtes UTF-8 darstellen kann (falls es nicht in die Ersatzhiroglyphe umgewandelt wurde), wird ein Fragezeichen angezeigt.
Das Fragezeichen ist das Ersatzzeichen für nicht darstellbare Zeichen (die fehlen im Zeichensatz).
Es nützt auch nix, wenn ich die Kollation dieser Tabelle auf utf8_general ändere. Ich versteh grad die Welt nicht.
Siehe oben, die Datenbank "denkt", es wäre ein normales Ansi oder westlich Zeichen das da vom Ansi oder westlich Formular-Dokument an die Datenbank gesendet wird.

Ich hatte mich damit auch schon ausgiebig beschäftigen dürfen und ganz klar, was da wirklich immer passiert, wird es wohl nie werden, vermutlich auch den Erfindern von utf-8 nicht.
Ich hatte auch Kollation utf-8 und bekam Fragezeichen in der Frontseite, aber komischerweise bekam ich es ordentlich im Backend (einer nativen Programmierung, kein Stangen-CMS) angezeigt. Woran lag es?
Die Backendseite hatte ich als utf-8 Dokument umgewandelt, aber nicht die Dokumente die die weitere Verarbeitung im Frontend machten, besonders nicht das HTML-Template.
Selbst die modifizierte HTTP-Header Übergabe als utf-8 half nichts, denn der Server ging davon aus, dass es westliche Codierung sei, die da als Zeichen auszugeben wäre, selbst wenn dann der Browser also Seiten-Codierung utf-8 angezeigt bekommen hat.
Es wurde wegen dem html-Template wohl doppelt gemoppelt, ein utf-8 codiertes Zeichen als westlich interpretiert und versucht, als utf-8 darzustellen.
Im Backend war es dagegen banal, da gab es noch nicht einmal eine Browseranweisung für die Darstellung in utf-8, es war einfach als utf-8 Zeichen, weil das Dokument utf-8 codiert war.

Dagegen war es nicht möglich, ein Zeichen direkt in der DB zu ändern, weil man so nicht direkt an die Daten heran kommt, es stand immer eine Eingabemaske dazwischen.
Ob die Kollation nun utf-8 war oder nicht, spielte für die Zeichenausgabe keine Rolle, aber bei phpmyadmin wurden bei westlicher Kollation nur Ersatzzeichen-Hiroglyphen angezeigt und bei utf-8 Kollation wurden die Zeichen in Klartext dargestellt.

VG,
Frank
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von Faar » Do 14. Nov 2013, 15:19

Übrigens,
Programmdateien nachträglich in utf-8 umzuwandeln hat unschöne Nebenwirkungen, wie wir z.B. bei Contenido 4.8 sehen können mit dem Fragezeichen statt einem Ü bei "Übersicht" im Backend.
Hier müsste man das Dokument nachträglich mit utf-8 Ü korrigieren, sofern man wüsste, wo es ist.

Und im Programm können so beliebte Trennzeichen wie ßßß oder das isländische Thorn þ ganz unschöne Ersatzzeichen ergeben wie ð¥Ð.
Damit funktioniert dann natürlich das Programm nicht mehr.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Probleme mit türkischer Sprache

Beitrag von homtata » Fr 15. Nov 2013, 10:10

Hallo Faar,

trotzdem scheint es einzig an der Spalten-Einstellung für die Kollation zu liegen, denn dann WERDEN die Werte korrekt abgespeichert. Mit der Original-Kollation werden die deutschen Sonderzeichen ja auch nicht umschrieben, sondern in Reinform abgespeichert (ä,ü,ß), und latin1_german2_ci scheint nunmal bestimmte Sonderzeichen einfach nicht zu kennen, kann sie beim Speichern also auch weder umwandeln noch umschreiben noch sonstwas. Und nach der Umstellung der Spaltenkollation auf utf8 klappt es ja dann auch, und zwar in alle Richtungen (Datenbankmanipulation direkt, Auslesen nach Contenido, Ändern in Contenido).
Wenn die Kollation keine Rolle spielen würde, dann müssten ALLE Sonderzeichen, auch die deutschen, meines Erachtens anders kodiert abgespeichert werden.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [Bug?] UTF8 Probleme mit fremden Schriftzeichen

Beitrag von Faar » Sa 5. Mär 2016, 10:09

Ich habe nun das gleiche Problem mit asiatischen Schriftzeichen und die Ursache liegt in der Datenbank.
Ich habe jeweils beim Setup nur die Einstellung utf8 gesehen, also wer von Contenido 4fb kam eigentlich auf die Idee, das CMS prinzipiell auf UTF8 umzustellen aber die Datenbank-Tabellenerzeugung (create table) im Setup auf z.B. latin1_german2_ci zu belassen? :evil:
Das hier stimmt dann ja wohl absolut nicht:
Zeichensätze Ihrer Datenbank

Ausschließlich in Version 4.9.4 von CONTENIDO können Sie unter den erweiterten Einstellungen für die Datenbank festlegen, welchen Zeichensatz Sie verwenden möchten und mit welcher Zeichenkodierung Ihre CONTENIDO-Datenbank konfiguriert werden soll. Empfohlen wird für den normalen Einsatz von CONTENIDO die Verwendung von utf8, wie voreingestellt.

Zeichenkodierung

Ab Version 4.9.5 von CONTENIDO wird Ihr System automatisch mit der Zeichenkodierung utf-8 installiert.
https://docs.contenido.org/display/COND ... sanleitung

Ich darf jetzt hergehen und jede einzelne Tabellenspalte in utf8_general_ci umzustellen.
Bei 65 Tabellen mal X Spalten macht das wie viel Arbeit?

Bei manchen Spalten mag das noch gehen, weil nur das Programm dort Zeichen einfügt, aber überall wo z.B. ein Asiate Charakter-Zeichen eintragen kann, passt es nicht mehr.
Und den Spaß darf ich nun wohl bei jeder CMS Installation machen, um die Mehrsprachigkeit zu gewährleisten, die bei 4.8 noch problemlos funktionierte (und immer noch funktioniert).
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [Bug?] _UTF8 Probleme mit Datenbank

Beitrag von Faar » Sa 5. Mär 2016, 10:44

Kennt jemand dieses php Script oder hat es gar schon verwendet?

Code: Alles auswählen

<?
#########################################################################
#########################################################################
##                                                                     ##
## Script coded by Eric Reiche                                         ##
##                                                                     ##
## Version: 0.2 / 2006-08-16 17:35 GMT + 100                           ##
## Version 0.2 contains bugfixes                                       ##
##                                                                     ##
## Inspired by serversupportforum.de user monotek                      ##
## ( http://www.serversupportforum.de/forum/sql/        \              ##
## 9279-kollation-von-tabellen-aendern.html#post67293 )                ##
## [Check link  for bashscript]                                        ##
##                                                                     ##
## Web: http://www.ericreiche.net  ||  Mail: mail [AT] ericreiche [DOT] net  ##
##                                                                     ##
## You can spread this script, as long as you don't touch this copymark     ##
##                                                                     ##
#########################################################################
#########################################################################


//Config:
  $mysqlserver = 'localhost';    //Host
  $mysqluser = 'root';           //User [It's recommended to use root]
  $mysqlpw = 'passwort';                 //Password
  $mysqldb = 'datenbank';       //Database
  $stepping = 100;               //Queries per Page
  $tabletoskip = 'really_big_table'; //If you have a really big table, you can enter it here,
                                 //it will be skipped, to prevent a script abort
                               
  $collation = 'latin1_german2_ci';
  $character_set = 'latin1';
//End Config

#######################################################################
# Do not change anything from here, until you know what you're doing  #
#######################################################################
  
if(isset($_GET['start']) && is_numeric($_GET['start'])){
  $start = $_GET['start'];
  if($start > 0){
    $start = $start * $stepping;
  }
}else{
  $start = 0;
}
//mysql connect
@mysql_connect($mysqlserver, $mysqluser, $mysqlpw) OR die("No Conncection to Server. Report: :".mysql_error());
mysql_select_db($mysqldb) OR die("couldn't select database, Report: ".mysql_error());
unset($mysqlserver);
unset($mysqluser);
unset($mysqlpw);

$i = 0;
print('<pre>');
if($start == 0){
  $sql = 'ALTER DATABASE '.$mysqldb.' DEFAULT CHARACTER SET '.$character_set.' COLLATE '.$collation.";\r\n";
  mysql_query($sql);
  print($sql);
}

$sql = 'Show tables;';
$result1 = mysql_query($sql);
while($tables = mysql_fetch_assoc($result1)){
    if($start == 0){
    $sql = 'ALTER TABLE '.$tables['Tables_in_'.$mysqldb].' DEFAULT CHARACTER SET '.$character_set.' COLLATE '.$collation.";\r\n";
    mysql_query($sql);
    print('&nbsp;&nbsp;'.$sql);
  }
  
  $sql = 'Show columns FROM '.$tables['Tables_in_'.$mysqldb];
  $result2 = mysql_query($sql);
  
  while($columns = mysql_fetch_assoc($result2)){
    
    if(substr_count($columns['Type'], 'varchar') || substr_count($columns['Type'], 'text')){
      $i++;
      if($i >= $start && $i < ($start + $stepping)){
        $sql = 'ALTER TABLE '.$tables['Tables_in_'.$mysqldb].' CHANGE '.$columns['Field'].' '.$columns['Field'].' '.$columns['Type'].' CHARACTER SET '.$character_set.' COLLATE '.$collation.';';
        if($tabletoskip != $tables['Tables_in_'.$mysqldb]){
          mysql_query($sql);
          print('&nbsp;&nbsp;&nbsp;&nbsp;'.$i.'. '.$sql."\r\n");
        }else{
          print('&nbsp;&nbsp;&nbsp;&nbsp;'.$i.'. <b>SKIPPED</b>: '.$sql."\r\n");
        }
      }
    }
  }

}
print('</pre>');


  print('<a href="'.$_SERVER['PHP_SELF'].'?start='.($_GET['start'] + 1).'">Weiter...</a>');

?>
Quelle: http://serversupportforum.de/forum/69306-post5.html

Vielleicht gibt es ja auch eine SQL Anweisung, die alles durcharbeitet?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Zuschauer
Beiträge: 141
Registriert: Do 5. Dez 2013, 08:57
Kontaktdaten:

Re: [Bug?] Probleme mit türkischer Sprache

Beitrag von Zuschauer » Sa 5. Mär 2016, 13:59

Datenbank (am besten unkomprimiert) exportieren (inkl. DROP TABLE und CREATE TABLE), dann per Editor alle Vorkommen von DEFAULT CHARSET= am Ende von CREATE TABLE ersetzen, dann wieder importieren.

Gruß
Zuschauer

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: [Bug?] Probleme mit türkischer Sprache

Beitrag von Faar » Mo 7. Mär 2016, 08:32

Moin Zuschauer,

danke, das wird vermutlich der einfachste und schnellste Weg sein.
Ich hab das noch nicht ausprobiert aber es sollte gehen.

Viele Grüße,
Faar
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten