Chris: eregi_replace mit "ü" ?

Hi,

ich habe in PHP eine String-Query mit eregi_replace.
Dabei will ich aus einer Datei Namen herauslesen, die Umlaute in eine Buchstabenkombination vertauschen und diese dann als Dateinamen verwenden.
Das klappt alles ganz gut mit Ä,ä, ö,Ö, ß und Ü. Aber nicht mit "ü". Wie kann das sein - was mache ich falsch?
Danke für die Hilfe
Christoph
Hier der kurze Quelltext (unten noch mal ganz):
<?php
...
$Dateiname = $Name[0].$Name[1].'Daten'.$Endung;
$zUMLA = eregi_replace("ä","a_e", $Dateiname);
$zUMLO = eregi_replace("ö","o_e", $zUMLA);

// DIESER TEIL GEHT NICHT:
//-----------------------------------------------------
$zUMLU = eregi_replace("ü","u_e", $zUMLO);
//-----------------------------------------------------

$zUMLS = eregi_replace("ß","s_s", $zUMLU);
$zUMLA = eregi_replace("Ä","a_e", $zUMLS);
$zUMLU = eregi_replace("Ü","u_e", $zUMLA);
$zUMLS = eregi_replace("Ö","o_e", $zUMLU);

...
?>

Hier noch mal alles:
<?php
$Endung = ".php";
if(file_exists("Personal.txt")){
$Personal = @fopen("Personal.txt" ,"r");
rewind($Personal);
 if(filesize("Personal.txt") < 1){}
 else{
 $PS = fgetcsv($Personal,10000,"@");
 rsort($PS);
  foreach($PS as $Person){
  $Name = explode("+",$Person);
   if($Name[0]==""){continue;}
   else{
$Dateiname = $Name[0].$Name[1].'Daten'.$Endung;
$zUMLA = eregi_replace("ä","a_e", $Dateiname);
$zUMLO = eregi_replace("ö","o_e", $zUMLA);

// DIESER TEIL GEHT NICHT:
//-----------------------------------------------------
$zUMLU = eregi_replace("ü","u_e", $zUMLO);
//-----------------------------------------------------

$zUMLS = eregi_replace("ß","s_s", $zUMLU);
$zUMLA = eregi_replace("Ä","a_e", $zUMLS);
$zUMLU = eregi_replace("Ü","u_e", $zUMLA);
$zUMLS = eregi_replace("Ö","o_e", $zUMLU);
echo("oCFMenu.makeSub2('$Name[0]','$zUMLS','frmMain')\n");
}}}
fclose($Personal);}
else{}
?>

  1. Moment:
    es geht nur dann nicht, wenn das "ü" am Anfang steht.
    D.h.
    "Müller" geht -> Ergebnis: "Mu_eller"
    "üxel" geht nicht -> Ergebnis: "xel"
    Was soll das nur?
    Hilfe!!!! :-)
    Chris

    1. Hi,

      es geht nur dann nicht, wenn das "ü" am Anfang steht.

      bist Du _sicher_, dass das "ü" vor der RegExp noch in der Variable stand?

      Übrigens ist Dein Code nicht gerade ein Beispiel für optimalen Code ;-) Statt bei jeder Ersetzung eine neue Variable zu erzeugen, was schlecht wartbar ist und vor allem den Speicher mit nutzfreiem Müll zuhaut, erzeuge Dir doch einfach ein assoziatives Array mit Key "ü", Value "u_e" etc., gehe dies anschließend in einer Schleife durch und ersetze den Key durch seinen Value.

      Ganz nebenbei bemerkt gibt es eine String-Funktion zum Ersetzen von Text. Du brauchst keine RegExp-Kanone, um den Spatz zu erschießen; das kostet nur Performance.

      Cheatah

      --
      X-Will-Answer-Email: No
      1. Hi,

        danke für die Nachricht. Ich denke schon, dass das ü vorher noch da war - bei allen anderen variablen sind die umlaute ja auch dabei, und wenn das ü in der mitte steht taucht es ja auch auf.
        wie kann ich denn einen string mit einem assoziativen array durchsuchen?
        und wie lautet der simple string-ersetzen befehl?

        wie man sieht, bin ich noch ziemlich neu in php - ist mein erster versuch :-)

        auf jeden fall schon mal danke

        gruss
        christoph

        1. Hi,

          Ich denke schon, dass das ü vorher noch da war

          Du sollst nicht denken, sondern verifizieren. Ist eine Codezeile früher das "ü" noch vorhanden, eine Codezeile später jedoch weg?

          • bei allen anderen variablen sind die umlaute ja auch dabei, und wenn das ü in der mitte steht taucht es ja auch auf.

          Der erste Teilsatz bezieht sich explizit auch auf Umlaute, die am Anfang stehen?

          wie kann ich denn einen string mit einem assoziativen array durchsuchen?

          Nein, das geht nicht. Du kannst aber ein assoziatives Array _deklarieren_ und mit Werten füllen, dieses _mit_ einer Schleife durchlaufen, und den String _nach_ den schleifenaktuellen Werten durchsuchen, bzw. _darin_ Werte durch Werte ersetzen. Ein assoziatives Array ist ein hier günstiges Datenformat, keine Funktion.-

          und wie lautet der simple string-ersetzen befehl?

          Ich habe zwei Linkklicks und ca. drei Sekunden Suchen gebraucht, um sie zu finden.

          wie man sieht, bin ich noch ziemlich neu in php - ist mein erster versuch :-)

          Das ist ja nichts schlimmes, aber auch (bzw. gerade) als Anfänger solltest Du zunächst mal in der Doku unter http://www.php.net/ nachsehen.

          Cheatah

          --
          X-Will-Answer-Email: No
          1. Hi Cheatah,

            • bei allen anderen variablen sind die umlaute ja auch dabei, und wenn das ü in der mitte steht taucht es ja auch auf.

            Der erste Teilsatz bezieht sich explizit auch auf Umlaute, die am Anfang stehen?

            Ja!

            Nein, das geht nicht. Du kannst aber ein assoziatives Array _deklarieren_ und mit Werten füllen, dieses _mit_ einer Schleife durchlaufen, und den String _nach_ den schleifenaktuellen Werten durchsuchen, bzw. _darin_ Werte durch Werte ersetzen. Ein assoziatives Array ist ein hier günstiges Datenformat, keine Funktion.-

            Aha - klingt gut. Aber ist der Unterschied in der Speicherbelegung denn wirklich so gross?

            und wie lautet der simple string-ersetzen befehl?

            Ich habe zwei Linkklicks und ca. drei Sekunden Suchen gebraucht, um sie zu finden.

            War einen Versuch wert - der Mensch ist ja faul ;-)

            Danke
            Chris

            1. Hi,

              Aha - klingt gut. Aber ist der Unterschied in der Speicherbelegung denn wirklich so gross?

              das kommt auf die Menge der Ersetzungen, Menge der Aufrufe, Nutzung des Speichers und noch diverse andere Dinge an. Fakt ist, dass Du Variablen erzeugst, die Du ausschließlich dazu verwendest, aus ihnen andere Variablen zu erzeugen; Fakt ist ebenfalls, dass es problemlos anders geht. Mein Vorschlag hat aber neben dem Speicherbedarf noch diverse andere Vorteile (Lesbarkeit, Wartbarkeit, Allgemeingültigkeit, Anpassungsfähigkeit - Lerneffekt).

              Ich habe zwei Linkklicks und ca. drei Sekunden Suchen gebraucht, um sie zu finden.
              War einen Versuch wert - der Mensch ist ja faul ;-)

              Umso weniger verstehe ich, warum Du, anstatt mal eben in der Doku die Lösung nachzuschlagen, erst umständlich und zeitaufwändig nachgefragt hast ;-)

              Cheatah

              --
              X-Will-Answer-Email: No
              1. Hi,

                ich hab es jetzt mal gecheckt: das ü wird gar nich erst ausgelesen - danke für den Hinweis!

                neues Problem:
                warum wird ausgerechnet das ü nicht ausgelesen?

                ich habe den Zeiger ja mit rewind an den Anfang gesetzt. Was passt denn dann nich?

                Gruss
                Chris

                1. Hi,

                  warum wird ausgerechnet das ü nicht ausgelesen?

                  ist es denn vorhanden? Ab wann (exakt!) fehlt es?

                  ich habe den Zeiger ja mit rewind an den Anfang gesetzt.

                  Was eigentlich sogar überflüssig sein sollte; Du hast sie ja erst kurz zuvor geöffnet.

                  Cheatah

                  --
                  X-Will-Answer-Email: No