2017-02-08 4 views
1

私は、文字列ごとに3つの文字を分割するために、このコードをした細かい動作しますが、アクセントがめちゃくちゃされていますPHPのstr_split()のアクセントを持つすべてのn文字

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

が、それは

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

を出力私はすでに同様の質問があったことを知っていますが、この質問は私を助けませんでした。 ucwords and french accented lettres encoding。私はmb_splitを試しましたが、成功しなかったので、正しい正規表現を見つけることができなかったので...正しいコードは何でしょうか?

+0

utf8-encode関数でarray_mapを試しましたか? –

+0

試しました: 'function myfunction($ v){utf8_encode($ v);} print_r(array_map(" myfunction "、$ splitted_array)'すべての値が空ではありません... – codeispoetry

答えて

3

ユーザー "veszelovszki at gmail dot com"は、PHPのstr_splitマニュアルページに以下の解決策を掲載しました。これは、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 good! "最初のテストの後、働いているようだ。" ...これまでのところ、...ありがとう! " – codeispoetry

0

私は今日同じ問題を抱えていましたが、私が使っているのはhere is the solutionです。基本的には正規表現を使用しています。

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

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

// Print the entire match result 
print_r($matches); 
関連する問題