[REGEX] utf8 - preg_replace - umlaute - sonderzeichen

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

  • [REGEX] utf8 - preg_replace - umlaute - sonderzeichen

    Hallo,

    ich möchte per "preg_replace" Sonderzeichen aus einem UTF-8 String entfernen:

    $str = preg_replace('/[^\w\pL]/u', ' ', $str);

    Info:

    "\u" => pattern-modifier (gibt an, dass es sich um utf-8 handelt)
    "\pL" => character-class (alle unicode Zeichen)

    Das funktioniert auch wunderbar unter Windows (XP). Unter Linux (CentOs, Fedora), werden die Umlaute als Sonderzeichen erkannt und mit entfernt.

    Habe schon eine Menge ausprobiert bekomme die Expression aber nicht unter Linux zu laufen

    Hat jemad eine Idee?

    greeTz
    waYan
    Zuletzt geändert von waYan; 29.04.2008, 16:53.

  • #2
    Code:
    [^\w\PLöäü]
    schonmal ausprobiert?

    bzw.:
    Code:
    ä  ü  ö
    ä ü ö

    Kommentar


    • #3
      @$_Baker

      thx.. für die Antwort - aber das wäre ja nur ein Workaround. Wer weiss welche Zeichen noch Fälschlicher Weise als Sonderzeichen rausfliegen...


      greeTz
      waYan

      Kommentar


      • #4
        Hmm.. Die alphanumerischen ([0-9a-zA-Z]) auf jeden Fall ganz sicher nicht

        Wenn du allerdings mit kyrillischen oder Chinesischen oder wasweißich-für Buchstaben zu tun hast, dann könntest du recht haben (genau weiß ich das nicht, diese Zeichen gibt es in den 2 Sprachen, mit denen ich zu tun habe, nicht).
        Wenn das ß (sz) erhalten bleiben soll, dann noch das hier:
        Code:
        ß
        ß

        Kommentar


        • #5
          ganz genau - dänisch, slowenisch usw.

          Kommentar


          • #6
            Allerdings, wenn sich die Anzahl an möglichen Sonderzeichen im Rahmen hält, warum dann nicht str_replace() mit einem Array?
            Wäre ja nur einmal alle Tasten, bei denen mehrere Zeichen aufgedruckt sind, mit Umschalt und/oder AltGr durchgehen^^

            Kommentar


            • #7
              Denke das utf8_encode und/oder setlocale die Antwort ist!

              Kommentar


              • #8
                Unter Linux (CentOs, Fedora), werden die Umlaute als Sonderzeichen erkannt und mit entfernt.
                Halt ich für ein Gerücht. /u klappt super und ist genau das was du brauchst (mal abgesehen davon, dass du prec ohne utf8 support kompiliert hast oder so).
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  @PHP-Desaster

                  setlocale(LC_ALL, 'de_DE.UTF8');

                  ist natürlich selbstverständlich hat aber leider nicht mit diesem Problem zu tun.

                  utf8_encode - ist in diesem Zusammenhang auch nix, da die gesamte Seite sowiso in UTF-8 kodiert ist.

                  @tontechniker

                  ist aber leider so das ist ja genau die Frage - warum geht es nicht? Kannst Du mir mal bitte Deine phpinfo() - Werte für PCRE, mbstring usw. mitteilen?

                  Meine lauten:
                  PHP Version 5.1.6
                  Apache/2.2.3 (CentOS)
                  --with-pcre-regex=/usr
                  PCRE (Perl Compatible Regular Expressions) Support enabled
                  PCRE Library Version 6.6 06-Feb-2006
                  Multibyte Support enabled
                  Multibyte string engine libmbfl
                  Multibyte (japanese) regex support enabled
                  Multibyte regex (oniguruma) version 3.7.1
                  mbstring.detect_order no value no value
                  mbstring.encoding_translation Off Off
                  mbstring.func_overload 0 0
                  mbstring.http_input pass pass
                  mbstring.http_output pass pass
                  mbstring.internal_encoding no value no value
                  mbstring.language neutral neutral
                  mbstring.strict_detection Off Off
                  mbstring.substitute_character no value no value

                  greeTz
                  waYan

                  Kommentar


                  • #10
                    Kannst Du mir mal bitte Deine phpinfo() - Werte für PCRE, mbstring usw. mitteilen?
                    PHP Version 5.2.5
                    PCRE (Perl Compatible Regular Expressions) Support enabled
                    PCRE Library Version 7.3 2007-08-28
                    Multibyte Support enabled
                    Multibyte string engine libmbfl
                    Multibyte (japanese) regex support enabled
                    Multibyte regex (oniguruma) version 4.4.4
                    Multibyte regex (oniguruma) backtrack check On
                    mbstring.detect_order no value no value
                    mbstring.encoding_translation Off Off
                    mbstring.func_overload 0 0
                    mbstring.http_input pass pass
                    mbstring.http_output pass pass
                    mbstring.internal_encoding UTF-8 UTF-8
                    mbstring.language neutral neutral
                    mbstring.script_encoding no value no value
                    mbstring.strict_detection Off Off
                    mbstring.substitute_character no value no value

                    Multibyte regex Einstellungen haben mit /u aber nichts zutun - die sind nur für die mb_ereg-Funktionen. Um aus der Manual zu zitieren:
                    u (PCRE_UTF8)
                    Dieser Modifikator schaltet mit Perl nicht kompatible zusätzliche PCRE-Funktionalität an. Suchmuster werden als UTF-8 behandelt. Dieser Modifikator steht unter Unix seit PHP 4.1.0 und unter Win32 seit PHP 4.2.3 zur Verfügung. Ob es sich im Suchmuster um gültiges UTF-8 handelt, wird seit PHP 4.3.5 überprüft.
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      mhhh... hat es vielleicht mit der unterschiedlichen PCRE Library Version zu tun? Kann ja dann laut PHP-Manual auch nicht sein, da es sich ja um ein zusätzliches Feature handelt.

                      @tontechniker

                      auf welchem OS hast Du das denn ausprobiert. Wie gesagt bei mir local auf WIN XP PHP Version 5.2.5 funktioniert das auch bestens.

                      Unter Linux, egal ob CentOS, Fedora, Debian, geht es einfach nicht. Vielleicht sollte ich das ganze mal in einem Linux-Systemadmin- Forum schildern...


                      greeTz
                      waYan

                      Kommentar


                      • #12
                        auf welchem OS hast Du das denn ausprobiert. Wie gesagt bei mir local auf WIN XP PHP Version 5.2.5 funktioniert das auch bestens.
                        OS X also Unix und Gentoo.
                        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                        Kommentar

                        Lädt...
                        X