2017-02-08 16 views
1

Я этот код, чтобы разбить строку каждые 3 символов, работает отлично, но акценты перепутались:PHP str_split() каждые п символов с акцентами

$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

Вы пытались использовать массив_map с помощью функции utf8-encode? –

+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

«... до сих пор. ..хорошо! »После первого тестирования, кажется, работает.« ... до сих пор ... так что спасибо! »:) – 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);