Umlaute und Regulärer Ausdruck

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Umlaute und Regulärer Ausdruck

    Hallo,
    kann mit jemand erklären, warum das hier nicht funktioniert:

    PHP-Code:
    preg_match('/^(über |über: )/u',utf8_encode($value)) 
    Es soll damit überprüft werden, ob am anfang des strings das wort "über" steht. Aber es gibt probleme mit dem Umlaut "ü". Damit die Überprüfung auf Umlaute funktioniert soll das ganze utf8 codiert sein. Aber irgendwie gibt es da probleme:

    Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3

    hat jemand einen Ausweg parat?
    Danke!
    Zuletzt geändert von itsmejake; 02.02.2009, 16:56.

  • #2
    Deine Datei ist kein UTF-8. Entweder diesen Missstand ändern oder die Unicode-Zeichen über die Hexadezimalschreibweise angeben.

    Kommentar


    • #3
      Re: Umlaute und Regulärer Ausdruck

      Original geschrieben von itsmejake
      Hallo,
      kann mit jemand erklären, warum das hier nicht funktioniert:

      PHP-Code:
      preg_match('/^(über |über: )/u',utf8_encode($value)) 
      Das geht effektiver (sprich: schneller):
      PHP-Code:
      preg_match('/^über:? /u'utf8_encode($value)); 
      Es soll damit überprüft werden, ob am anfang des strings das wort "über" steht. Aber es gibt probleme mit dem Umlaut "ü". Damit die Überprüfung auf Umlaute funktioniert soll das ganze utf8 codiert sein.
      Warum? Du wandelst den zu durchsuchenden String erst von ISO-Latin-1 in UTF-8, um ihn dann zu durchsuchen. Das ist umständlich. Du solltest die UTF-8-Funktionalität der PCRE-Befehle benutzen, wenn sie auch wirklich benötigt wird. So lange dein $value aber ISO-LATIN-1 enthält (oder eine andere 8-Bit-Kodierung), ist das unnötig. Daher genügt:
      PHP-Code:
      preg_match('/^über:? /'$value); 
      Das ist schneller und geht mit dem Hauptspeicher sparsamer um.

      Aber irgendwie gibt es da probleme:

      Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3
      Auf "Offset 3" steht dein "ü". Also ist höchstwahrscheinlich deine Quelltext-Datei nicht UTF-8-kodiert. Das kannst du bspw. mit einem Hex-Viewer/-Editor prüfen -- dann müsste das "ü" nämlich aus zwei Bytes bestehen.

      Wenn du dem Rat von PHP-Desaster folgst, dann denke daran, dass UTF-Zeichen in PCRE so kodiert werden:

      PHP-Code:
      preg_match('/^\x{0fc}ber:? /u'utf8_encode($value)); 
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        Hallo und Danke für die Antworten! Leider funktioniert weder:

        PHP-Code:
        preg_match('/^über:? /'$value); 
        noch

        PHP-Code:
        preg_match('/^x{0fc}ber:? /u'utf8_encode($value)); 
        jetzt gibt es zwar keine Fehlermeldung mehr aber der findet das "über:" einfach nicht?!?!? ergebnis ist immer "0"???

        Wie sucht Ihr in einem String nach dem wort "über", so dass man auch an diesem Schlüsselwort splitten kann mit preg_split?

        Das muss doch möglich sein??? ich bin verzweifelt!;-(

        Kommentar


        • #5
          Original geschrieben von itsmejake
          Wie sucht Ihr in einem String nach dem wort "über", so dass man auch an diesem Schlüsselwort splitten kann mit preg_split?
          Ganz einfach - in dem ich beides (String, und Script welches den RegEx enthaelt) in der gleichen Zeichenkodierung abspeichere, so dass ich nicht Aepfel mit Birnen vergleiche, was du offenbar tust.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Kannst du mir auf die Sprünge helfen?

            Das klingt logisch - hab aber keinen Ansatz.

            Der String kommt aus einem Formular übergeben. Wenn ich ihn innerhalb des scripts deklariere funktioniert es aber eben nicht über das Formular:

            PHP-Code:
            $value="über:asdfgasdfkjgsdfkjgas"
            (hier funktioniert es)


            Thx!

            Kommentar


            • #7
              Und das Formular befindet sich in einem Dokument, welches mit der gleichen Zeichenkodierung gesendet und angezeigt wird?

              Hat es irgendeine accept-charset-Angabe? (Sollte, wenn man konsequent und durchgehend eine Kodierung verwendet, eigentlich nicht noetig sein.)
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                JAu!

                Habs nochmal überprüft. Aus irgendeinem Grund war die eine Datei als ANSI und die Andere utf-8 codiert!?!?!?

                Wär aber nie drauf gekommen, dass das solch einen Fehler verursachen könnte!

                DANKE!

                Kommentar


                • #9
                  Schau dir die Kodierung an, in der die Seite gehalten ist, in der das Formular steht.

                  EDIT:

                  Ah schon erledigt.

                  Kommentar

                  Lädt...
                  X