Probleme bei Wortsuche mit preg_match

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme bei Wortsuche mit preg_match

    Hallo zusammen,

    folgender Code funktioniert nicht, sobald Umlaute oder Sonderzeichen wie ß usw. im Suchwort enthalten sind:

    PHP-Code:
    $suchwort="Test";
    if (
    preg_match("/\b".$suchwort."\b/i""Das hier ist eine Test zum Testen der Sache.")) {
       echo 
    "Es wurde 1 Übereinstimmung gefunden.";
    } else {
       echo 
    "Keine Übereinstimmung";

    Hat jemand eine Lösung parat?

  • #2
    Mit welcher Zeichenkodierung arbeitest du?

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Bisher mit noch gar keiner. Ist nur eine kleine PHP-Test-Datei und da funktionieren die Umlaute nicht. Zum Beispiel die Suche nach dem Wort "Öl" gibt kein Ergebnis zurück.

      Im Header hab ich das hier:
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      stehen. Aber das sollte ja keinen Einfluss auf den PHP-Code haben.

      Kommentar


      • #4
        Zitat von unknownsoul Beitrag anzeigen
        Bisher mit noch gar keiner. Ist nur eine kleine PHP-Test-Datei und da funktionieren die Umlaute nicht. Zum Beispiel die Suche nach dem Wort "Öl" gibt kein Ergebnis zurück.

        Im Header hab ich das hier: stehen. Aber das sollte ja keinen Einfluss auf den PHP-Code haben.
        Vertue dich da mal nicht. Schau dir mal dieses Tutorial an, da geht es um die Feinheiten.
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          Okay, UTF-8 ist ja schon mal der richtige Weg, da z.B. Umlaute nicht codiert werden müssen. Ich denke ja eher, dass preg_match Wörter mit Umlauten oder ß nicht als eigenständige Wörter anerkennt?! Denn selbst bei codierten Umlauten erkennt preg_match das Wort nicht.

          Kommentar


          • #6
            Ohne /b, hat preg_match keine Probleme mit dem Umlaut. Das hier:

            PHP-Code:
            $suchwort="Öl";
            if (
            preg_match("/".$suchwort."/i""Morgen mache ich einen Ölwechsel.")) {
               echo 
            "Es wurde 1 Übereinstimmung gefunden.";
            } else {
               echo 
            "Keine Übereinstimmung";

            funktioniert. Allerdings findet er eben auch den Begriff Öl bei Ölwechsel. Ich möchte aber auf vollständige Wörter prüfen.

            Kommentar


            • #7
              PHP-Code:
              preg_match("/\s".$suchwort."\s/i""Morgen mache ich einen Ölwechsel."
              So was?

              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Ja aber mit /b wie im Eröffnungspost. Ich glaube fast, dass das mit der Codierung nichts zu tun hat. PHP wird deutsche Wörter, die Umlaute usw. enthalten nicht als Wörter anerkennen. Daher nützt die Wortgrenze mit /b auch nicht viel. Wahrscheinlich brauche ich einen komplett neuen reg. Ausdruck.

                Kommentar


                • #9
                  Ich würde erst mal probieren, eine entsprechende Locale zu setzen.

                  Und PHP: Unicode character properties - Manual könnte ggf. auch noch von Interesse sein.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Zitat von unknownsoul Beitrag anzeigen
                    Hallo zusammen,

                    folgender Code funktioniert nicht, sobald Umlaute oder Sonderzeichen wie ß usw. im Suchwort enthalten sind:

                    PHP-Code:
                    $suchwort="Test";
                    if (
                    preg_match("/\b".$suchwort."\b/i""Das hier ist eine Test zum Testen der Sache.")) {
                       echo 
                    "Es wurde 1 Übereinstimmung gefunden.";
                    } else {
                       echo 
                    "Keine Übereinstimmung";

                    Hat jemand eine Lösung parat?
                    Bau dir die Wortgrenzen selbst: "Nichtwortzeichen"-Assertion + Suchbegriff + "Nichtwortzeichen"-Assertion. Es gibt dafür entsprechende Unicode-Klassen.

                    Die Assertion "\b" ist eine wenig brauchbare Altlast aus Pre-Unicode-Zeiten. Sie funktioniert nur im ASCII-Bereich oder in der jeweils eingestellten Codepage. Falls man das per setlocale() überhaupt sauber hinbekommt.

                    *korinthenkack* ... und das ß ist kein "Sonderzeichen", sondern[sic!] ein gewöhnlicher Buchstabe. Zumindest heutzutage. Früher war es ja mal eine Ligatur. Aber ich schweife ab ...
                    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                    Kommentar


                    • #11
                      Vielen Dank. Ich hab den Ausdruck nun wie folgt geändert:

                      PHP-Code:
                      preg_match("/\W".$suchwort."\W/i",$text
                      Jetzt erkennt er zwar, wenn ich z.B. direkt nach "Ölwechsel" suche, findet aber nichts bei der Suche nach "ölwechsel". So als wäre das kleine "ö" ein Nichtwortzeichen?! Zudem darf das Wort jetzt auch nicht mehr am Anfang oder am Ende der Zeichenkette stehen. Das kann man zwar mit
                      PHP-Code:
                      " ".$text." " 
                      wieder umgehen, ist aber wenig elegant. Sorry, aber mit den regulären Ausdrücken kenn ich mich wirklich kaum aus.
                      Zuletzt geändert von unknownsoul; 19.05.2012, 11:14.

                      Kommentar


                      • #12
                        Wortsuche mit preg_match - PHP Forum: phpforum.de

                        Kommentar

                        Lädt...
                        X