Schrift
[thread]3636[/thread]

Mysql 5, DBI, PERL + Unicode :) (Seite 2)

Leser: 3


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
GwenDragon
 2005-11-08 16:44
#33741 #33741
User since
2005-01-17
14542 Artikel
Admin1
[Homepage]
user image
Und, wie ist die HTML-Seite kodiert?
Auch als UTF-8 und content-type utf-8?

Es gibt beim Formular noch die Möglichkeit den Parameter acceptCharset=utf-8 zu setzen.\n\n

<!--EDIT|GwenDragon|1131461243-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

dassmann
 2005-11-08 17:04
#33742 #33742
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
Die HTML Page hat die utf8-metaangabe (obwohl das form via ssi ist), und sollte auch utf8 sein (wegen utf8 als defaultcharset im apache).

Ich hab jetzt mal die acceptcharset= gesetzt, aber das bringt auch nichts
esskar
 2005-11-08 17:30
#33743 #33743
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hast du einen link auf die seite?
btw. solltest du nicht
Code: (dl )
$values = encode ("utf-8", $values); 

davor schreiben?
bzw. wie baust du $values zusammen?
scheint mir, als ob das mehrere Values durch Komma getrennt sind!?!
dassmann
 2005-11-08 20:07
#33744 #33744
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
nein, link hab ich keinen

Aber das müsste so stimmen (ich hab ja das encode davor)

Und ja, $values setzt sich aus den einzelnen Werten aus dem Formlular zusammen, getrennt durch kommas
ptk
 2005-11-08 20:43
#33745 #33745
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=dassmann,08.11.2005, 15:38]Die Umlaute sind zerschossen.

$dbh = DBI->connect("DBI:mysql:$db", $uname, $pw");
$dbh->do( "INSERT INTO `db` ($keys) VALUES ($values)" );

Dann sind die Umlaute zerschossen. Selbst wenn ich noch $keys = encode ("utf-8", $keys); davorschiebe hilft das nicht.
[/quote]Die $keys brauchst du nicht zu encodieren, die dürfen wahrscheinlich sowieso nur ASCII sein. Die $values musst du encodieren. Und überhaupt: warum benutzt du keine DBI-Platzhalter?
Quote
Achja, die Daten kommen aus einem HTML-Form

Schreib mal
Code: (dl )
use Devel::Peek; Dump $value;
und guck mal nach, ob das UTF-8-Flag gesetzt ist.
dassmann
 2005-11-08 21:33
#33746 #33746
User since
2005-01-28
9 Artikel
BenutzerIn
[default_avatar]
DBI-Platzhalter?

$keys = Encode::encode ("utf-8", $keys);
$values = Encode::encode ("utf-8", $values);


SV = PVMG(0x90d9f8) at 0x6c9fd0
REFCNT = 1
FLAGS = (SMG,POK,pPOK)
IV = 0
NV = 0
PV = 0x8b5590 "\303\266"\0
CUR = 2
LEN = 3
MAGIC = 0x628830
MG_VIRTUAL = &PL_vtbl_mglob
MG_TYPE = PERL_MAGIC_regex_global(g)
MG_LEN = -1


Also kein UTF8\n\n

<!--EDIT|dassmann|1131479547-->
ptk
 2005-11-08 22:31
#33747 #33747
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=dassmann,08.11.2005, 20:33]DBI-Platzhalter?
[/quote]Siehe DBI-Dokumentation. Unbedingt verwenden, ansonsten ist dein Programm ein Sicherheitsloch.
Quote
$keys = Encode::encode ("utf-8", $keys);
$values = Encode::encode ("utf-8", $values);


SV = PVMG(0x90d9f8) at 0x6c9fd0
REFCNT = 1
FLAGS = (SMG,POK,pPOK)
IV = 0
NV = 0
PV = 0x8b5590 "\303\266"\0
CUR = 2
LEN = 3
MAGIC = 0x628830
MG_VIRTUAL = &PL_vtbl_mglob
MG_TYPE = PERL_MAGIC_regex_global(g)
MG_LEN = -1


Also kein UTF8

Vorher oder nachher? Das Ziel sollte sein, dass die Daten, die man an DBI und mysql übergibt, Octets sind, also ohne UTF-8-Flag. Das ist hier der Fall, dein "ö" ist hier als UTF-8 kodiert, aber nicht als UTF-8 markiert. Wenn du die Daten wieder aus der Datenbank einliest, musst du decode("utf-8", ...) verwenden, dann hast du wieder einen String mit Characters.
format_c
 2005-11-09 14:21
#33748 #33748
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=dassmann,08.11.2005, 16:04]Die HTML Page hat die utf8-metaangabe (obwohl das form via ssi ist), und sollte auch utf8 sein (wegen utf8 als defaultcharset im apache).

Ich hab jetzt mal die acceptcharset= gesetzt, aber das bringt auch nichts[/quote]
Das musst du im Header mit angeben um dem Browser korrekt mitzuteilen welches Encoding er andwenden soll. Das geht über CGI z.B.so:
Code: (dl )
1
2
print CGI::header(-charset=>"utf-8");
print $html_stuff;


Dann musst du dir keine Gedanken in deinem Perl Code um das Encoding der Daten zu machen, was auch selten Sinn macht wenn das Ziel mit diesem Encoding umgehen kann.

Gruß Alex
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2005-11-06 15:15.