Maxi: Probleme bei preg_replace in einer function

Ichhabe ein function geschreiben, die meine URL umwandeln soll. Ohen function klappt es, un mit ihr.... alle Umlaute werden nicht umgewandelt, sondern mit einem _ ausgegeben, als würde es meine Befehle nicht geben!

function TEXT($string)
{
$patterns[0] = '/ä/';
$patterns[1] = '/Ä/';
$patterns[2] = '/ö/';
$patterns[3] = '/Ö/';
$patterns[4] = '/ü/';
$patterns[5] = '/Ü/';
$patterns[6] = '/ß/';
$patterns[7] = '/[^a-zA-Z0-9_]/u';
$replacements[0] = "ae";
$replacements[1] = "ae";
$replacements[2] = "oe";
$replacements[3] = "oe";
$replacements[4] = "ue";
$replacements[5] = "ue";
$replacements[6] = "ss";
$replacements[7] = "_";

$retrun strtolower(preg_replace($patterns, $replacements, $string))
}

  1. Meine Herren!

    function TEXT($string)
    {
    // [...]
    $retrun strtolower(preg_replace($patterns, $replacements, $string))
    }

    return ist ein Schlüsselwort und keine Variable.

    Für die kontext-gerechte Behandlung von URLs gibt es die fertigen Methoden urlencode und urldecode.

    --
    “All right, then, I'll go to hell.” – Huck Finn
  2. Natürlich ist return keine Variable, das war mein Fehler, jetzt ist der CODE korrekt, doch er funktioniert trotzdem nicht. Ich möchte nicht URLENCODE benutzen, da ich keine + sondern _ möchte.
    Und ich versteh nich das preg_replace ausserhalb einer function funktioniert und inerhalb eben nicht?

    function TEXT($string)
    {
    $patterns[0] = '/ä/';
    $patterns[1] = '/Ä/';
    $patterns[2] = '/ö/';
    $patterns[3] = '/Ö/';
    $patterns[4] = '/ü/';
    $patterns[5] = '/Ü/';
    $patterns[6] = '/ß/';
    $patterns[7] = '/[^a-zA-Z0-9_]/u';
    $replacements[0] = "ae";
    $replacements[1] = "ae";
    $replacements[2] = "oe";
    $replacements[3] = "oe";
    $replacements[4] = "ue";
    $replacements[5] = "ue";
    $replacements[6] = "ss";
    $replacements[7] = "_";

    retrun strtolower(preg_replace($patterns, $replacements, $string))
    }

    1. Meine Herren!

      Und ich versteh nich das preg_replace ausserhalb einer function funktioniert und inerhalb eben nicht?

      Für preg_replace gibt es keinen Unterschied, ob es innerhalb oder außerhalb einer Funktion aufgerufen wird. Was allerdings einen Unterschied macht, ist ob das PHP-Skript Syntax-Fehler hat oder nicht. Stell doch mal dein error_reproting zum Debuggen an ;)

      function TEXT($string)  
      
      > {  
      > // [...]  
      > retrun strtolower(preg_replace($patterns, $replacements, $string))  
      > }
      
      

      retURn nicht retRUn!

      --
      “All right, then, I'll go to hell.” – Huck Finn
    2. Hallo,

      Natürlich ist return keine Variable, das war mein Fehler, jetzt ist der CODE korrekt

      aber nicht der, den du hier zeigst. Da steht nämlich immer noch retrun, nicht return, und das abschließende Semikolon fehlt auch.

      Und ich versteh nich das preg_replace ausserhalb einer function funktioniert und inerhalb eben nicht?

      Ist das so?? Mich interessiert ja brennend, wie der String aussieht, den die Funktion als Parameter bekommt. Stehen da tatsächlich Umlaute drin? Wenn ja, in welcher Zeichencodierung? Und in welcher Zeichencodierung stehen sie im Script?

      Wenn das PHP-Script selbst und dein Eingabestring in unterschiedlichen Zeichencodierungen vorliegen, dann werden natürlich die Suchmuster $patterns[0] bis $patterns[6] nicht gefunden, und damit fällt $patterns[7] über alles her, was nicht ASCII-Buchstabe, Ziffer oder Unterstrich ist.

      Also kläre am besten mal das Thema Zeichencodierung.

      Ciao,
       Martin

      PS: Und entscheide dich doch bitte für _einen_ Namen. Ob Maxi oder Daggi, ist letztendlich egal, aber such dir bitte eins aus und bleib dabei.

      --
      Die letzten Worte der Challenger-Crew:
      Lasst doch mal die Frau ans Steuer!
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Eingebunden wird er so

        TEXT($out->text);

        wobei die Var $out->text aus der MYSQL Datenbank kommt, die wiederrum in utf8_general_ci abgespeichert ist

        In dem Feld steht "Es gehört nach Österreich"

        rauskommen sollte, Ziel wäre:

        "es_gehoert_nach_oesterreich"

        stelle ich das ganze aber in keine function, die ich mit

        include_once 'functions.php';

        einbinde, sondern der Ausgabe voran... (also nur den Code ohne function, wird er ohne Probleme ausgeführt).

        function TEXT($string)
        {
        $patterns[0] = '/ä/';
        $patterns[1] = '/Ä/';
        $patterns[2] = '/ö/';
        $patterns[3] = '/Ö/';
        $patterns[4] = '/ü/';
        $patterns[5] = '/Ü/';
        $patterns[6] = '/ß/';
        $patterns[7] = '/[^a-zA-Z0-9_]/u';
        $replacements[0] = "ae";
        $replacements[1] = "ae";
        $replacements[2] = "oe";
        $replacements[3] = "oe";
        $replacements[4] = "ue";
        $replacements[5] = "ue";
        $replacements[6] = "ss";
        $replacements[7] = "_";
        return strtolower(preg_replace($patterns, $replacements, $string));
        }

        1. Hi,

          Eingebunden wird er so

          TEXT($out->text);

          also rufst du die Funktion auf und wirfst das Ergebnis gleich wieder weg.

          wobei die Var $out->text aus der MYSQL Datenbank kommt, die wiederrum in utf8_general_ci abgespeichert ist

          Das ist nicht unbedingt relevant; wichtiger ist: In welcher Codierung kommt das beim Script an, und in welcher Codierung liegt der Script-Quellcode selbst vor?
          Wobei auch das im Moment noch unerheblich ist, solange du das Funktionsergebnis gar nicht verwendest.

          Ciao,
           Martin

          --
          Husten kann böse Folgen haben.
          Besonders im Kleiderschrank.
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Nachdem ich jetzt alles doppelt sehe, hier nur meine weiteren Eingrenzungen, Erfolge

            Es liegt  wahrscheinlich nicht an der function, da ich sie jetzt einfach mal am Anfang des Scriptes hingesetzt habe. Da geht es.

            Es muss mit dem einbinden zu tun haben, wenn ich sie in meine andere Datei schreibe, in der ich meine ganzen functionen habe, dann geht es nicht mehr. Was aber irgendwie komisch ist weil ' ' ersetzt er mit '_' aber 'ä' mit '', also löscht er. Also er findet die Zeichen, aber er ersetzt sie nicht, sondern er löscht sie..

            Da wird man ja total wirr im Kopf

            1. Hallo

              Nachdem ich jetzt alles doppelt sehe, hier nur meine weiteren Eingrenzungen, Erfolge

              Es liegt  wahrscheinlich nicht an der function, da ich sie jetzt einfach mal am Anfang des Scriptes hingesetzt habe. Da geht es.

              Wennj es nachwievor nicht mit der Funktion funktioniert, dann funktioniert der auch nachwievor nicht.

              Du benutzt mittlerweile das Ergbebnis des Funktionsaufrufs?

              $ergebnis = TEXT($wasauchimmer);

              Es muss mit dem einbinden zu tun haben, wenn ich sie in meine andere Datei schreibe, in der ich meine ganzen functionen habe, dann geht es nicht mehr. Was aber irgendwie komisch ist weil ' ' ersetzt er mit '_' aber 'ä' mit '', also löscht er. Also er findet die Zeichen, aber er ersetzt sie nicht, sondern er löscht sie..

              Dann ist da noch etwas anderes. Mit dem hier von dir gezeigten Code muss es nach den diversen Korrekturen und der Verwendung des Ergebnisses klappen.

              Tschö, Auge

              --
              Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
              Terry Pratchett, "Wachen! Wachen!"
              ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
              Veranstaltungsdatenbank Vdb 0.3
              1. Danke für die rege Anteilnahem,
                ich habe mein Problem nun gelöst.
                Der Datensatz war in der Datenbank mit uft abgespeichert,
                meine Script Seite hatte UFT8 ohne BOM  und die Seite wo meine functions sind ANSiI, dies habe ich jetzt auf UFT8 ohne BOM  umgestellt, und sie da...

        2. Meine Herren!

          einbinde, sondern der Ausgabe voran... (also nur den Code ohne function, wird er ohne Probleme ausgeführt).

          Es wird nicht besser, wenn du es immer wieder wiederholst. Zwei Fehler haben wir ja schon rausgefunden. Und inzwischen funktioniert es, hast du zwischendurch selber überhaupt mal getestet?

          PS: Der Übersicht halber, würde ich Arrays immer initialisieren.

          --
          “All right, then, I'll go to hell.” – Huck Finn