2017-02-08 3 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);