2016-01-01 3 views
-4

Может ли это работать для разбиения многобайтовой строки каждые десять символов?PHP: многобайтовый разделитель строк UTF-8?

$string = 'Star Wars Episode Seven Sucked';  
mb_split('.', $string, 10); 

РНР руководство говорит, что str_split() работает на байтах, а не символы многобайтных строк. Это означает, что mb_split() выглядит естественной «перегруженной» заменой, но две функции (str_split() и mb_split()) имеют разные сигнатуры функций и не являются «перегруженными приятелями», так сказать. Затем я подумал, что с этим?

mb_internal_encoding("UTF-8"); 
$string = 'Star Wars Episode Seven Sucked'; 
$tokens = []; 

for($i = 0, $length = mb_strlen($string); $i < $length; $i += 10) 
{ 
    $tokens[] = mb_substr($string, $i, 10, 'UTF-8'); 
} 

print_r($tokens); 
+0

Вы ищете: http://stackoverflow.com/q/3825226/3933332? – Rizier123

+2

Я смущен, почему вы спрашиваете об этом, а не просто проверяете его сами? Или читаете [mb_split()] (http://php.net/manual/en/function.mb-split.php)? –

+1

@devlincarnate Я вижу. Я отсылаю вас к определению сайта Stackoverflow. – Melinda

ответ

-1
function mb_utf8_split($string, $interval) 
{ 
    $tokens = []; 
    mb_internal_encoding('UTF-8'); 

    $stringEncoding = mb_detect_encoding($string, 'UTF-8, ISO-8859-1', true); 

    if(!$stringEncoding) 
    { 
      throw new RuntimeException("Unable to identify character encoding."); 
    } 

    if($stringEncoding !== 'UTF-8') 
    { 
      $string = mb_convert_encoding($string, 'UTF-8', $stringEncoding); 
    } 

    for($i = 0, $length = mb_strlen($string); $i < $length; $i += $interval) 
    { 
     $tokens[] = mb_substr($string, $i, $interval, 'UTF-8'); 
    } 

    return $tokens; 
} 
+0

Возможно, это было бы лучше. – Melinda

+1

Это хорошая попытка. Я не уверен о втором параметре 'mb_detect_encoding()' '' '' UTF-8, ISO-8859-1''), но это выглядит как хорошее начало для меня. –

Смежные вопросы