Matze: Multibyte-String in Zeichen zerlegen

Hallo!

Ich möchte einen Multibyte String in ein Array zerlegen.
Zunächst fand ich str_split() perfekt bis ich einen String mit Umlauten probiert habe.

Bei dem String "tür" liefert mir str_split()
Array
(
    [0] => t
    [1] => Ã
    [2] => ¼
    [3] => r
)

Ich habe dann versucht das Problem zu lösen indem ich die interne Kodierung mit mb_internal_encoding("UTF-8") auf UTF-8 stelle aber davon lies sich str_split() nicht beeindrucken.

Die Verwendung von preg_split() brachte mir dasselbe Ergebnis.

Gibt es eine Funktion mit der ich Strings mit Multibyte-Zeichen korrekt in ein Array zerlegen kann?

Grüße, Matze

  1. Tach,

    Ich habe dann versucht das Problem zu lösen indem ich die interne Kodierung mit mb_internal_encoding("UTF-8") auf UTF-8 stelle aber davon lies sich str_split() nicht beeindrucken.

    natürlich nicht, dass beeinflußt nur die Multibyte-Stringfunktionen und deren Namen beginnen mit mb_, du suchst also mb_split.

    mfg
    Woodfighter

    1. Hallo Woodfighter!

      natürlich nicht, dass beeinflußt nur die Multibyte-Stringfunktionen und deren Namen beginnen mit mb_, du suchst also mb_split.

      Ja klar, danke! Ich find es aber schon erstaunlich, dass mb_split() und str_split() nicht untereinander verlinkt sind.

      Gruß, Matze

      1. @@Matze:

        nuqneH

        Ja klar, danke! Ich find es aber schon erstaunlich, dass mb_split() und str_split() nicht untereinander verlinkt sind.

        Ich finde es eher erstaunlich, dass so nutzlose Funktionen wie Stringoperationen, die nicht auf Zeichen, sondern auf Bytes arbeiten, überhaupt noch im Sprachumfang von PHP enthalten sind.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        1. Hi!

          Ich finde es eher erstaunlich, dass so nutzlose Funktionen wie Stringoperationen, die nicht auf Zeichen, sondern auf Bytes arbeiten, überhaupt noch im Sprachumfang von PHP enthalten sind.

          PHP 6 ist noch nicht erschienen. Erst damit wird das Multibyte-Kodierungen-Problem richtig gelöst werden und nicht nur durch eine zusätzliche Extension ein Workaround angeboten.

          Lo!

    2. Hallo nochmal!

      du suchst also mb_split.

      Mh könntest du mir vielleicht nochmal helfen und sagen wie die RegExp dafür aussehen muss?
      Ich dachte es geht mit mb_split('/./', 'tür'); aber da krieg ich als Ergebnis nur
      Array
      (
          [0] => tür
      )

      Grüße, Matze

      1. Hi,

        Mh könntest du mir vielleicht nochmal helfen und sagen wie die RegExp dafür aussehen muss?
        Ich dachte es geht mit mb_split('/./', 'tür'); aber da krieg ich als Ergebnis nur
        Array
        (
            [0] => tür
        )

        http://www.php.net/manual/en/function.mb-split.php#80046

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Hallo ChrisB,

          http://www.php.net/manual/en/function.mb-split.php#80046

          aber ich dachte genau dafür ist mb_split() da?
          Oder wie arbeitet mb_split()?

          Grüße, Matze

  2. (Hallo|Hi(ho)|und Gute Nacht) Matze,

    Ich möchte einen Multibyte String in ein Array zerlegen.
    Zunächst fand ich str_split() perfekt bis ich einen String mit Umlauten probiert habe.
    Ich habe dann versucht das Problem zu lösen indem ich die interne Kodierung mit mb_internal_encoding("UTF-8") auf UTF-8 stelle aber davon lies sich str_split() nicht beeindrucken.

    Gut, du möchtest also nicht mit einer beliebigen Multibyte-Kodierung, sondern nur mit UTF-8 arbeiten.

    Die Verwendung von preg_split() brachte mir dasselbe Ergebnis.

    Weil du preg_split() falsch angewandt hast ...

    Gibt es eine Funktion mit der ich Strings mit Multibyte-Zeichen korrekt in ein Array zerlegen kann?

    Für UTF-8 eignet sich preg_split() ganz gut:

      
    $chars = preg_split('//u', $utf8encoded);  
    
    

    Man beachte das kleine "u" (für UTF-8-encoded)
    und die Tatsache, dass zwischen den "Delimitern" nichts steht ("trenne zwischen den Zeichen").

    Das ist der ganze Trick.

    MffG(ähnen)
    EisFuX