mb_split

(PHP 4 >= 4.2.0, PHP 5)

mb_split Разделение строк в многобайтных кодировках, используя регулярное выражение

Описание

array mb_split ( string $pattern , string $string [, int $limit = -1 ] )

Разделяет многобайтную строку string, используя регулярное выражение pattern и возвращает массив array.

Список параметров

pattern

Шаблон регулярного выражения.

string

Разбиваемая строка string.

limit
Если необязятельный аргумент limit задан, функция разобьет строку не более, чем на limit частей.

Возвращаемые значения

Результат разбиения в виде массива array.

Примечания

Замечание:

Для этой функции будет использована внутренняя кодировка или кодировка, установленная функцией mb_regex_encoding().

Смотрите также

  • mb_regex_encoding() - Возвращает текущую кодировку для многобайтового регулярного выражения в виде строки
  • mb_ereg() - Совпадение с регулярным выражением с поддержкой многобайтовых символов

Коментарии

I figure most people will want a simple way to break-up a multibyte string into its individual characters. Here's a function I'm using to do that. Change UTF-8 to your chosen encoding method.

<?php
function mbStringToArray ($string) {
   
$strlen mb_strlen($string);
    while (
$strlen) {
       
$array[] = mb_substr($string,0,1,"UTF-8");
       
$string mb_substr($string,1,$strlen,"UTF-8");
       
$strlen mb_strlen($string);
    }
    return 
$array;
}
?>
2007-12-26 11:37:58
http://php5.kiev.ua/manual/ru/function.mb-split.html
We are talking about Multi Byte ( e.g. UTF-8) strings here, so preg_split will fail for the following string: 

'Weiße Rosen sind nicht grün!'

And because I didn't find a regex to simulate a str_split I optimized the first solution from adjwilli a bit:

<?php
$string 
'Weiße Rosen sind nicht grün!'
$stop   mb_strlen$string);
$result = array();

for( 
$idx 0$idx $stop$idx++)
{
   
$result[] = mb_substr$string$idx1);
}
?>

Here is an example with adjwilli's function:

<?php
mb_internal_encoding
'UTF-8');
mb_regex_encoding'UTF-8'); 

function 
mbStringToArray
$string
)
{
 
$stop   mb_strlen$string);
 
$result = array();

  for( 
$idx 0$idx $stop$idx++)
  {
     
$result[] = mb_substr$string$idx1);
  }

  return 
$result;
}

echo 
'<pre>'PHP_EOL
print_rmbStringToArray'Weiße Rosen sind nicht grün!'true)), PHP_EOL,
'</pre>'
?>

Let me know [by personal email], if someone found a regex to simulate a str_split with mb_split.
2009-08-03 06:34:58
http://php5.kiev.ua/manual/ru/function.mb-split.html
an other way to str_split multibyte string:
<?php
$s
='әӘөүҗңһ';

//$temp_s=iconv('UTF-8','UTF-16',$s);
$temp_s=mb_convert_encoding($s,'UTF-16','UTF-8');
$temp_a=str_split($temp_s,4);
$temp_a_len=count($temp_a);
for(
$i=0;$i<$temp_a_len;$i++){
   
//$temp_a[$i]=iconv('UTF-16','UTF-8',$temp_a[$i]);
   
$temp_a[$i]=mb_convert_encoding($temp_a[$i],'UTF-8','UTF-16');
}

echo(
'<pre>');
print_r($temp_a);
echo(
'</pre>');

//also possible to directly use UTF-16:
define('SLS',mb_convert_encoding('/','UTF-16'));
$temp_s=mb_convert_encoding($s,'UTF-16','UTF-8');
$temp_a=str_split($temp_s,4);
$temp_s=implode(SLS,$temp_a);
$temp_s=mb_convert_encoding($temp_s,'UTF-8','UTF-16');
echo(
$temp_s);
?>
2010-03-25 04:46:32
http://php5.kiev.ua/manual/ru/function.mb-split.html
In addition to Sezer Yalcin's tip.

This function splits a multibyte string into an array of characters. Comparable to str_split().

<?php
function mb_str_split$string ) {
   
# Split at all position not after the start: ^
    # and not before the end: $
   
return preg_split('/(?<!^)(?!$)/u'$string );
}

$string   '火车票';
$charlist mb_str_split$string );

print_r$charlist );
?>

# Prints:
Array
(
    [0] => 火
    [1] => 车
    [2] => 票
)
2010-09-10 12:43:15
http://php5.kiev.ua/manual/ru/function.mb-split.html
The $pattern argument doesn't use /pattern/ delimiters, unlike other regex functions such as preg_match.

<?php
   
# Works. No slashes around the /pattern/
   
print_rmb_split("\s""hello world") );
   Array (
      [
0] => hello
     
[1] => world
   
)

   
# Doesn't work:
   
print_rmb_split("/\s/""hello world") );
   Array (
      [
0] => hello world
   
)
?>
2011-04-14 16:23:25
http://php5.kiev.ua/manual/ru/function.mb-split.html
To split an string like this: "日、に、本、ほん、語、ご" using the "、" delimiter i used:

     $v = mb_split('、',"日、に、本、ほん、語、ご");

but didn't work.

The solution was to set this before:

       mb_regex_encoding('UTF-8');
      mb_internal_encoding("UTF-8"); 
     $v = mb_split('、',"日、に、本、ほん、語、ご");

and now it's working:

Array
(
    [0] => 日
    [1] => に
    [2] => 本
    [3] => ほん
    [4] => 語
    [5] => ご
)
2012-04-05 21:17:08
http://php5.kiev.ua/manual/ru/function.mb-split.html
a (simpler) way to extract all characters from a UTF-8 string to array with a single call to a built-in function:

<?php
  $str 
'Ма-
руся'
;
 
print_r(preg_split('//u'$strnullPREG_SPLIT_NO_EMPTY));
?>

Output:

Array
(
    [0] => М
    [1] => а
    [2] => -
    [3] => 

    [4] => р
    [5] => у
    [6] => с
    [7] => я
)
2015-07-02 14:01:47
http://php5.kiev.ua/manual/ru/function.mb-split.html

    Поддержать сайт на родительском проекте КГБ