Umlaute umwandeln

Fragenfrager

Erfahrenes Mitglied
Hallo liebes Forum,

folgendes Problem macht mich gerade wahnsinnig.
In einem Formular gebe ich einen Namen ein, der dann in verschiedenen Datenbanken gesucht wird. Da es beim Anlegen der Namen keine Konventionen gab, wie mir Umlauten umzugehen ist, haben wir beide Varianten vorliegen, also z.B. "Grünke" und "Gruenke".
In meinen DB-Statements will ich beide Varianten berücksichtigen. Dazu folgender Code in der Datei functions.php:
PHP:
function umlauteumwandeln($str){
  $tempstr = Array("Ä" => "AE", "Ö" => "OE", "Ü" => "UE", "ä" => "ae", "ö" => "oe", "ü" => "ue");
  return strtr($str, $tempstr);
 
 }

  function ergebnis($verbindung,$anwendungsname,$username)
 
  {
  $convertedusername=umlauteumwandeln($username);
  switch ($anwendungsname)
  {
//… hier werden für die verschiedenen Anwendungen die Statements erzeugt, mal mit $username, mal mit $convertedusername
}
}
Der Aufruf erfolgt aus einer anderen Datei, in der die functions.php eingebunden ist:
PHP:
ergebnis($con,$anwendungsname,$suchbegriff);

Das Problem ist, dass $convertedusername wenn ich es testweise mit echo ausgeben, immernoch die Umlaute drin hat. Sowohl in der function selbst als auch in der Funktion "ergebnis". Lasse ich die Funktion umlauteumwandeln testweise ganz alleine (eigene Datei, nirgends eingebunden) aufrufen, so funktioniert die Umwandlung. Es muss also irgendwo noch etwas sein, dass dies verhindert oder zurückwandelt.
Hat jemand eine Idee, wonach ich noch suchen kann?
 
Wenn Ich es unter http://www.writephponline.com/ einfüge und ausführe bekomme Ich folgendes:

PHP:
<?php
function umlauteumwandeln($str){
  $tempstr = Array("Ä" => "AE", "Ö" => "OE", "Ü" => "UE", "ä" => "ae", "ö" => "oe", "ü" => "ue");
  return strtr($str, $tempstr);
 }

function ergebnis($verbindung,$anwendungsname,$username) {
  $convertedusername=umlauteumwandeln($username);
  echo $convertedusername;
}

ergebnis('', '', "Ein Ä Ö Ü ä ö ü");
?>

Ergebnis:
Code:
Ein AE OE UE ae oe ue

Ich habe nur mal deine Switch-Anweisung ausgelassen. :)

Also dein Umwandeln funktioniert soweit.

Überprüfe doch mal deine Switch-Anweisung da nicht ersichtlich ist, wie deine Switch-Anweisung aufgebaut ist. :)
 
Lass ich nur Deinen Code laufen, klappt alles.
Der Switch-Part ist für das Problem irrelevant.
Ich habe nun testweise folgendes versucht:
PHP:
function umlauteumwandeln($str){
  $tempstr = Array("Ä" => "AE", "Ö" => "OE", "Ü" => "UE", "ä" => "ae", "ö" => "oe", "ü" => "ue");
  return strtr($str, $tempstr);
 }

 function ergebnis($verbindung,$anwendungsname,$username)  {
   echo $username;
   echo "<br />";
   echo  $convertetusername=umlauteumwandeln($username);
   $username='grünke';
   echo "<br />";
  echo  $convertetusername=umlauteumwandeln($username);
}

Das Ergebnis ist
grünke
grünke
gruenke

Der $username wird im Formular mit "grünke" eingegeben und dann wie folgt bearbeitet:
PHP:
$suchbegriff=addslashes(strtolower(trim($_POST['suchbegriff'])));
Anschließend erfolgt der Aufruf mit
PHP:
ergebnis($con,$anwendungsname,$suchbegriff)
Noch irgendeine Idee?
 
Irgendwo muss ein Unterschied sein, ob der Wert aus $_POST kommt oder von Hand programmiert wurde.

Lass deine Variable mal mit urlencode() ausgeben. Dann erkennst du ev. ob irgendwelche komischen Zeichen drin sind.
ggf. auch das Charset der Eingabe prüfen
 
Tatsächlich ergab das urlencode() "gr%C3%BCnke".
Ich habe jetzt einen manuellen utf8_decode() eingebaut, nun erhalte ich das gewünschte Ergebnis.
Wenn ich mal etwas Zeit finde, suche ich auch den Grund für das Problem ;)
Nichts hält so lange wie ein Provisorium.
 
Zurück