Umlaute aus einer Eingabe filtern [Problem gelöst]

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
dragon1402
Mitglied
Beiträge: 4
Registriert: 07.01.2005 14:14

Umlaute aus einer Eingabe filtern [Problem gelöst]

Beitrag 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.
Zuletzt geändert von dragon1402 am 11.01.2005 14:04, insgesamt 1-mal geändert.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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);
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag 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.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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 :)
AmShaegar
Mitglied
Beiträge: 408
Registriert: 09.07.2004 17:33

Beitrag von AmShaegar »

*g* vielen dank :wink:
dragon1402
Mitglied
Beiträge: 4
Registriert: 07.01.2005 14:14

Beitrag 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?
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
dragon1402
Mitglied
Beiträge: 4
Registriert: 07.01.2005 14:14

Beitrag 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.
Benutzeravatar
itst
Ehrenadmin
Beiträge: 7418
Registriert: 21.08.2001 02:00
Wohnort: Büttelborn bei Darmstadt
Kontaktdaten:

Beitrag 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 ;)
Sascha A. Carlin,
phpBB.de Ehrenadministrator
:o
dragon1402
Mitglied
Beiträge: 4
Registriert: 07.01.2005 14:14

Beitrag 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.
Antworten

Zurück zu „Coding & Technik“