Seite 1 von 2

Umlaute aus einer Eingabe filtern [Problem gelöst]

Verfasst: 07.01.2005 22:12
von dragon1402
Hi,

kann mir jemand bei folgedem Problem helfen:

Eine Suchfunktion bei einer DB, mit der ich arbeiten muss, macht es erforderlich, dass alle Umlaute ersetzt werden
Bsp: Eingabe des Namens: Herr Müller
Suchen in der DB nach: Herr Mueller

Hier ist der Code, den ich versucht habe,um die Umlaute zu ersetzen:

Code: Alles auswählen

<?php
  if ($string==""):
?>
 <form action="<?=$self_php?>" method= "post">
  <input type ="text" name="string" />
  <input type= "submit" name="okay" value="Okay" />
 </form>
 
 <?php
  else:
 
  $string = eregi_replace("ä", "ae", $string);
  $string = eregi_replace("ü", "ue", $string);
  $string = eregi_replace("ö", "oe", $string);
  $no_umlaut = $string;
 
  echo "$no_umlaut";
  endif;
 ?>  
Das Ergebnis ist jedoch ein String, der unverändert ist.

Wäre echt super, wenn mir jemand einen entscheidenden Tipp geben kann
Danke.

Verfasst: 08.01.2005 00:09
von Pyramide
str_replace reicht in dem Fall aus:

Code: Alles auswählen

$search = array('Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü', 'ß');
$replace = array('Ae', 'Oe', 'Ue', 'ae', 'oe', 'ue', 'ss');
$string = str_replace($search, $replace, $string);

Verfasst: 08.01.2005 13:13
von AmShaegar
es weden dann alle werte aus dem array abgefragt und dauch dem richtigen aus dem anderen array zugeordnet??? das sollte ich mir merken wenn's wirklich so ist.

Verfasst: 09.01.2005 01:22
von Pyramide
AmShaegar hat geschrieben:das sollte ich mir merken wenn's wirklich so ist.
Und falls du's doch mal vergessen solltest kannst du's auch nachlesen :)

Verfasst: 09.01.2005 13:51
von AmShaegar
*g* vielen dank :wink:

Verfasst: 10.01.2005 08:51
von dragon1402
Also erstmal danke für deinen Code, aber leider ist mein Problem noch nicht gelöst.

Dein Code funktioniert ohne Probleme, aber nur wenn ich den zu ändernden String im Code definiere. Z.B:

Code: Alles auswählen

$string="Ä, Ö, Ü, ä, ö, ü";
Leider wird keine Änderung bewirkt, wenn der String aus einem Formular kommt. Find ich zwar irgendwie unlogisch aber so ist es leider. Kann es sein, dass es an irgendwelchen Einstellungen liegt?
Ich verwende die PHP Version 4.3.4, wenn das vielleicht noch irgendwie weiterhilft?

Verfasst: 10.01.2005 16:27
von Pyramide
Evtl. werden bereits Ersetzungen vorgenommen (z.B. a -> &auml;), so daß der Ursprüngliche String gar nicht mehr bei der Ersetzungsfunktion ankommt. Lass dir doch mal den Wert unmittelbar vor dem Aufruf von str_replace ausgeben.

Verfasst: 11.01.2005 11:05
von dragon1402
Also wenn ich mir den String direkt vor der Veränderung ausgeben lasse, ist er genau so, wie ich ihn auch eingegeben habe.
Habe jetzt einfach mal method="get" gesetzt. In der URL wird das "ä" in der Form übergeben: %C3%A4. Vielleicht hilft das irgendwie?

Mit &auml; hab ich auch schon rumprobiert. Das Komische ist ja:

Code: Alles auswählen

$string = str_replace("ae", "&auml;", $string);
Das funktioniert, ist überhaupt kein Problem. Dreht man es jetzt aber rum, dann hat man das alte Problem: Eingabestring = Ausgabestring.

Verfasst: 11.01.2005 12:35
von itst
Die Eingabe kommt doch per Formular, oder?

In diesem Fall ist der Inhalt der Variable URL-kodiert, so daß Umlaute in ihren Hex-Code umgewandelt sind. Das musst Du mit urldecode() rückgängig machen.

Also:

Code: Alles auswählen

<?php 
  if ($string==""): 
?> 
 <form action="<?=$self_php?>" method= "post"> 
  <input type ="text" name="string" /> 
  <input type= "submit" name="okay" value="Okay" /> 
 </form> 
  
 <?php 
  else: 
  
  $search = array('Ä', 'Ö', 'Ü', 'ä', 'ö', 'ü', 'ß'); 
  $replace = array('Ae', 'Oe', 'Ue', 'ae', 'oe', 'ue', 'ss'); 
  $string = urldecode($string);
  $string = str_replace($search, $replace, $string);  $no_umlaut = $string; 
  
  echo "$no_umlaut"; 
  endif; 
 ?>
Nur mal so aus dem Handgelenk, ohne Gewähr ;)

Verfasst: 11.01.2005 14:02
von dragon1402
Yeah danke für den letzten Tip.
Hab jetzt eine Lösung gefunden, die auch bei mir funktioniert.
Für alle die es interessiert:

Code: Alles auswählen

 <?php
  if ($string==""):
 ?>
 <form action="<?=$self_php?>" method= "get">
  <input type ="text" name="string" />
  <input type= "submit" name="okay" value="Okay" />
 </form> 
 
 <?php
  else:
  $string = urlencode($string);
  $search = array('%C3%84', '%C3%96', '%C3%9C', '%C3%A4', '%C3%B6', '%C3%BC');
  $replace = array('Ae', 'Oe', 'Ue', 'ae', 'oe', 'ue');
  $string = str_replace($search, $replace, $string);
  $string = urldecode($string);
  $no_umlaut = $string;
  
  echo "$no_umlaut";
  endif;
 ?>  
Ist zwar ein Weg, der etwas umständlich ist, aber so geht es immerhin.

Danke allen, die mir geholfen haben, hoffe ich kann das irgendwann mal zurückzahlen.