2017-02-08 7 views
1

Ich habe diesen Code eine Zeichenfolge alle 3 Zeichen aufzuspalten, funktioniert gut, aber Akzente sind verwirrt:php str_split() alle n Zeichen mit Akzenten

$splitted_array = str_split('waderòrò',3); 

aber es gibt

print_r($splitted_array); >> Array ([0] => wad [1] => er▯ [2] => ▯r▯ [3] => ▯) 

Ich weiß, dass ähnliche Frage bereits gestellt wurde, aber diese Frage hat mir nicht geholfen. ucwords and french accented lettres encoding. Ich habe mb_split versucht, aber ohne Erfolg, weil ich nicht in der Lage war, die richtige Regex zu finden ... Was wäre der richtige Code?

+0

Haben Sie eine array_map mit der utf8-encode-Funktion ausprobiert? –

+0

Versucht: 'Funktion myfunction ($ v) {utf8_encode ($ v);} print_r (array_map (" meine_funktion ", $ splitted_array)' funktioniert aber nicht alle Werte sind leer ... – codeispoetry

Antwort

3

Benutzer "veszelovszki bei gmail dot com" posted die folgende Lösung auf die PHP str_split Handbuchseite. Es ist eine Multibyte-sichere Variante der Funktion str_split().

function mb_str_split($string, $split_length = 1) 
{ 
    if ($split_length == 1) { 
     return preg_split("//u", $string, -1, PREG_SPLIT_NO_EMPTY); 
    } elseif ($split_length > 1) { 
     $return_value = []; 
     $string_length = mb_strlen($string, "UTF-8"); 
     for ($i = 0; $i < $string_length; $i += $split_length) { 
      $return_value[] = mb_substr($string, $i, $split_length, "UTF-8"); 
     } 
     return $return_value; 
    } else { 
     return false; 
    } 
} 
+0

"... so weit,. ..so gut! "Nach einem ersten Test scheint es zu funktionieren." ... soweit, ... also danke !! ":) – codeispoetry

0

Ich hatte das gleiche Problem heute und here is the solution, die ich verwende. Es verwendet hauptsächlich reguläre Ausdrücke.

$re = '/\w{3}/u'; 
$str = 'waderòròцчшщ中华人民共和国'; 

preg_match_all($re, $str, $matches); 

// Print the entire match result 
print_r($matches); 
Verwandte Themen