Hallo Zusammen,
ich habe ein ganz großes Problem mit DBI/CGI und UTF-8. Ich habe ein Script (CMS), das funktionierte immer einwandfrei mit UTF-8 zurechtkam. Die Datenbanken und auch die Ein- und Ausgabe waren alle sauber UTF-8 kodiert und wurden einwandfrei angezeigt und in die DB geschrieben.
Nach Umstellung auf FastCGI, eigentlich ja nur eine zusätzliche Schleife, funktioniert da irgendwas, irgendwie gar nicht mehr. Die Daten werden zwar aus der DB richtig ausgelesen und auch im Browser korrekt ausgegeben, aber ich bekomms nicht hin, dass Daten, die ich über ein Formular (CMS-System) in die Datenbank schreibe, dort auch UTF8-kodiert ankommen. Das Script schreibt die Umlaute immer als Kauderwelsch in die DB.
Ich habs zwischendurch mal geschafft, dass die Umlaute richtig in der DB landen, dafür war aber dann die Umlaut-Ausgabe im Browser defekt.
Hier mal ein paar relevante Auszüge aus dem Script:
Das Script beginnt wie folgt:
use utf8;
use open ':encoding(UTF-8)';
use open ':std';
use CGI::Fast qw(:standard -utf8);
use FCGI();
Habs auch schon mit "$CGI::PARAM_UTF8 = 1;" innerhalb des fcgi-loops versucht... brachte aber auch nix.
Die Datenbankverbindung wird wie folgt aufgebaut:
my $options = { RaiseError => 1, AutoCommit => 1, mysql_enable_utf8 => 1 };
$dbh = DBI->connect( "dbi:mysql:$db{dbname};$db{hostext}",
$db{username},
$db{password},
$options
) || die 'Can´t connect to MYSQL-Server. '.$!;
#$dbh->do("set character set utf8");
$dbh->do("set names utf8");
Wie gern im Inet vorgeschlagen, jede einzelne Eingabe mit encode zu encodieren und dann erst in die DB zu schreiben ist keine Option, da das Script an die 10.000 Zeilen hat. Das dauert einfach zu lang.
Ausserdem hats ja ohne FastCGI funktioniert *heul
Bin für jeden Hinweis dankbar.
Grüße,
Stefan
Ein Weiser gibt nicht die richtigen Antworten, sondern er stellt die richtigen Fragen.