Bernhard Peissl: Lösung für das leidige Umlautproblem bei Formularübergabe an PERL

Beitrag lesen

Ich hatte eines der hier anscheinend am häugsten auftretenden Problemchen.

Ich wollte für meinen Onlineshop die Eingabewerte aus einem HTML-Bestellformular an ein PERL-Script übergeben, das die Bestellung verarbeiten soll, und gleichzeitig ein email wegschickt.

Bei Netscape gabs keine Probleme: Alle Umlaute wurden richtig aus dem Formular an PERL übergeben, aber der IE 5.0 verwendet anscheinend eine url-encoding, die alle Umlaute in verrückte Zeichen (wie z.B.: Ķ, oder Ö¤) umwandelt!

Nachdem ich mich in diesem Forum ein wenig umgesehen habe, hab ich zwar viel hilfreiches enzdeckt, aber ich war mir sicher, dass es für dieses Problem eine einfachere Lösung geben muss. Was ich hier gelesen habe war mir alles irgendwie zu kompliziert, um es schnell in meinen Shop einzubauen.

Da bin ich aber dann doch über eine Message gestolpert, die auf einen Thread verwies, in dem von Stefan Münz höchstpersönlich ein Suche/Ersetze-Script für Zeichenersetzungen zu finden ist. http://www.teamone.de/selfhtml/sfarchiv/1999_1/t02280.htm#a10577.

Ich hab mich an seine Lösung gehlten, und sie ein wenig auf mein Umlaut-Dilemma zugeschnitten, und das ist dabei herausgekommen. Ich habe folgenden Code in meine JavaScript Datei eingebaut:

// function parseString(text)
// {
// var new_text = "";
// for (var i = 0; i < text.length; i++)
//  {
//   if(text.charAt(i) == 'ü')      { new_text += "ue"; }
//   else if(text.charAt(i) == 'Ü') { new_text += "Ue"; }
//
//   else if(text.charAt(i) == 'ö') { new_text += "oe"; }
//   else if(text.charAt(i) == 'Ö') { new_text += "Oe"; }
//
//   else if(text.charAt(i) == 'ä') { new_text += "ae"; }
//   else if(text.charAt(i) == 'Ä') { new_text += "Ae"; }
//
//   else if(text.charAt(i) == 'ß') { new_text += "ss"; }
//   else new_text += text.charAt(i);
//  }
// return new_text;
// }

Aufgerufen wird das ganze mit =>

// field.value = parseString(field.value);

und einer for-schleife, die über alle Formularfelder iteriert (ACHTUNG: Dazu gehören auch Felder der Typen "hidden", "button","reset", ....)

So schickt der Browser (HTML) statt ä's und ö's ,... ae's und oe's ,.... an den Server (PERL). In meinem Perl-Script habe ich dann eine Funktion eingebaut, die das ganze wieder rückgängig macht, und aus allen übergebenen Parametern sämtliche ae's und oe's , ... wieder in Umlaute zurückverwandelt!

// sub parseString()
// {
//   $text =~ s/ae/ä/g;   $text =~ s/Ae/Ä/g;
//   $text =~ s/ue/ü/g;   $text =~ s/Ue/Ü/g;
//   $text =~ s/oe/ö/g;   $text =~ s/Oe/Ö/g;
// }

Bem: $text hat den Text der in die Mail geschrieben werden soll zum Inhalt. Rückgabewert brauch ich keinen, da ja alle Variablen in PERL globale sind!! - toll, nicht?

Tja solche Lösungen gefallen mir: Einfach Schnell und Gut, aber einfallen muss sie einem erst - Danke Stefan !!

Ich hoffe ich konnte damit allen Umlaut-Opfern helfen, denn diese zwei Scripts sollten dieses (im Nachhinein) lächerliche Problem endgültig aus der Welt schaffen, oder wenigstens aus diesem Forum. Es gibt doch wirklich grössere Probleme als Umlaute zu übergeben, oder ;-)