deutsche Umlaute maskieren
Christian
- cgi
Hallo,
ich habe ein Problem bei einer CGI-Suchmaschine und hoffe auf eine Lösung:
Die Suchmaschine ist von einem englischsprachigen Autor, der deshalb keine Umlaute berücksichtigt hat.
Ein ordentlicher Web-Designer, wie ich nun mal bin ;-) , habe ich alle Umlaute maskiert (d.h. aus ä wird ä etc.). Mein Problem ist nun, wenn man ein Suchbegriff mit einem Umlaut eingibt, der nicht maskiert ist also z.B. "Längsschnitt" (mir viel gerade nichts besseres ein...) wird nichts gefunden, da in der Index-Datei für die Suche "Lägsschnitt" steht.
Ich dachte mir, daß, bevor die Daten gesucht werden, die Suchbegriffe vom CGI maskiert werden. Leider habe ich nicht genügend Ahnung, um dies selbst zu machen. Wer kann mir da Hinweise geben?
Der Teil des Scripts, der die Suchgeriffe einliest, sende ich mal mit:
sub get_form
{
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
if ( $name eq 'terms' ) { $qsterms1 = $value }
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ( $name eq 'terms' ) { $qsterms = $value }
$FORM{$name} = $value;
}
}
Wenn mir einer helfen könnte, wäre ich sehr dankbar.
Ciao
Christian
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
Hier wird an dem "Wert" des einzelnen CGI-Parameters herumgeändert, d. h. das URL-enodung rückgängig gemacht.
(Hättest Du CGI.pm verwendet, wäre das alles gar nicht nötig gewesen.)
An dieser Stelle kannst Du natürlich auch weitere Änderungen vornehmen, etwa
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/"/"/g;
$value =~ s/ä/ä/g;
$value =~ s/ö/ö/g;
$value =~ s/ü/ü/g;
$value =~ s/Ä/Ä/g;
$value =~ s/Ö/Ö/g;
$value =~ s/Ü/Ü/g;
$value =~ s/ß/ß/g;
Das ist ein Code-Schnipsel, mit dem Du proprietäre
Sonderzeichen nach HTML-entities übersetzen würdest -
falls Du das Gegenteil brauchst, vertausche die beiden
Werte im "s"(ubstitute)-Befehl.
Die Frage ist, ob Du das für alle Parameterwerte brauchst
oder doch eher nur für einen einzigen (den Suchterm).
Dazu fehlt der umgebende Perl-Source.
Nächster Versucht (das Formular übersetzt ja leider
selbst HTML-Entities ...):
$value =~ s/&/&/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/"/"/g;
$value =~ s/ä/ä/g;
$value =~ s/ö/ö/g;
$value =~ s/ü/ü/g;
$value =~ s/Ä/Ä/g;
$value =~ s/Ö/Ö/g;
$value =~ s/Ü/Ü/g;
$value =~ s/ß/ß/g;