User since
2007-12-17
3
Artikel
BenutzerIn
Hallo,
ich sitze derzeit an dem Problem, das ich nicht recht weiß, wie ich einen String unter beachtung der Umlaute (ä ü ö usw.) in der Datenbank speichern soll. In PHP gibt es dafür htmlspecialchars() aber wie mache ich das bei Perl?
Bin für jeden Tipp dankbar...
User since
2003-08-15
2653
Artikel
BenutzerIn
ich würde niemals HTML-Code in einer Datenbank speichern. Dann kümmer dich lieber daraum, dass das charset eingehalten wird und zwar in der Datenbank, als wie auch im Dokument.
Du versaust dir mit sowas die ganze Datenbank; weil man weiss nie, was noch für Standards kommen. Wer weiss; vielleicht willst du eines Tages etwas anderes als HTML einsetzen, und dann sitzt du da auf deinen Umlauten.
Deshalb: Lass den Code durch einen parser laufen, und zwar beim output ans Dokument!
Denk auch immer daran, dass du, wenn du Umlaute in der Datenbanke hast, du diese später auch bei Vergleichen übersetzen willst:
WHERE umlaut = ü
... geht dann nämlich nicht mehr.
User since
2007-12-17
3
Artikel
BenutzerIn
Also wenn ich dich richtig verstehe, meinst du ich soll einfach ä, ü usw. in der Datenbank speicher wie es ist... also das in der Datenbank nachher auch ä ü usw. steht? Und dann soll ich diesen Datenbankeintrag parsen und ausgeben?
User since
2003-08-15
2653
Artikel
BenutzerIn
genau :)
Du musst ja auch mal daran denken, dass du die Datenbank vielleicht später mal mit einem GUi-Client abrufen willst der kein HTML versteht. Vielleicht gibt es ja auch mal eine andere Sprache außer HTML, die du lieber verwenden willst.
Um einen parser kommste sowieso nicht drum herum.
Stell dir mal vor, in deiner Datenbank stehen Passwörter.
Du willst nun prüfen, wer das Passwort "bäume" hat.
SELECT username FROM users WHERE passwd = 'bäume'
das hätte dann kein match zur Folge, weil du erst das Passwort in html übersetzen müsstest.
Das ist also ziemlicher quatsch, HTML in eine Datenbank zu schreiben.
Ich z.B. verzichte vollständig auf einen Parser. Ich verwende denselben Header wie Charset in der Datenbank. Dann kann man sich das nämlich auch sparen.
Du musst nur darauf achten, dass dein HTML-header derselbe ist wie dein Charset in der Datenbank.
User since
2003-08-15
2653
Artikel
BenutzerIn
ich hab grad übrigens nochmal nach htmlspecialchars() recherchiert.
Laut google übersetzt das Ding keine Umlaute, sondern quotet eher &, > < usw.
Umlaute wie äüö sind evtl. garnicht eingeschlossen.
User since
2007-12-17
3
Artikel
BenutzerIn
Danke dir für deine schnelle und präzise Antwort... Hat mir sehr weitergeholfen... und ich muss feststellen du hast recht... Ich werde das so machen wie du gesagt hast! Danke!
User since
2006-02-17
628
Artikel
BenutzerIn
Auch die HTML Ausgabe muss nicht umgewandelt werden. Verwende einen Zeichensatz der Umlaute kann, dann müssen diese auch nicht umgewandelt werden, dass einzige Zeichen dass dann noch umgewandelt werden muss ist '<'
User since
2003-08-15
2653
Artikel
BenutzerIn
da ich meistens sowieso mit CGI.pm arbeite, nehme ich meistens escapeHTML. Warum doppelt gemoppelt?
Hier ein Auszug aus escapeHTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
sub escapeHTML {
push @_,$_[0] if @_==1 && $_[0] eq 'CGI';
my ($self,$toencode,$newlinestoo) = CGI::self_or_default(@_);
return undef unless defined($toencode);
return $toencode if ref($self) && !$self->{'escape'};
$toencode =~ s{&}{&}gso;
$toencode =~ s{<}{<}gso;
$toencode =~ s{>}{>}gso;
if ($DTD_PUBLIC_IDENTIFIER =~ /[^X]HTML 3\.2/i) {
$toencode =~ s{"}{&
}
else {
$toencode =~ s{"}{"}gso;
}
my $latin = uc $self->{'.charset'} eq 'ISO-8859-1' ||
uc $self->{'.charset'} eq 'WINDOWS-1252';
if ($latin) {
$toencode =~ s{'}{&
$toencode =~ s{\x8b}{&
$toencode =~ s{\x9b}{&
if (defined $newlinestoo && $newlinestoo) {
$toencode =~ s{\012}{&
$toencode =~ s{\015}{&
}
}
return $toencode;
}
ist also auch nix weltbewegendes, aber genügen tuts trotzdem voll und ganz.
User since
2003-08-04
14371
Artikel
ModeratorIn
Froschpopo+2008-01-04 12:51:52--da ich meistens sowieso mit CGI.pm arbeite, nehme ich meistens escapeHTML. Warum doppelt gemoppelt?
[...]
TIMTOWTDI
In den früheren Posts steht nix von CGI.pm und ich arbeite häufig nicht direkt mit CGI.pm und da ist es manchmal praktischer nicht mit CGI.pm zu arbeiten.