Christian: deutsche Umlaute maskieren

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

  1. $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.

  2. 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/Ä/&Auml;/g;
      $value =~ s/Ö/&Ouml;/g;
      $value =~ s/Ü/&Uuml;/g;
      $value =~ s/ß/ß/g;