多字节字符串 函数
在线手册:中文  英文

mb_split

(PHP 4 >= 4.2.0, PHP 5)

mb_split使用正则表达式分割多字节字符串

说明

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

使用正则表达式 pattern 分割多字节 string 并返回结果 array

参数

pattern

正则表达式。

string

待分割的 string

limit
如果指定了可选参数 limit,将最多分割为 limit 个元素。

返回值

array 的结果。

注释

Note:

mb_regex_encoding() 指定的内部编码或字符编码将会当作此函数用的字符编码。

参见


多字节字符串 函数
在线手册:中文  英文

用户评论:

gunkan at terra dot es (2012-04-05 18:17:08)

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] => ご
)

boukeversteegh at gmail dot com (2011-04-14 13:23:25)

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
   
)
?>

boukeversteegh at gmail dot com (2010-09-10 09:43:15)

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] => 票
)

qdb at kukmara dot ru (2010-03-25 02:46:32)

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);
?>

gert dot matern at web dot de (2009-08-03 03:34:58)

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.

Sezer Yalcin (2009-02-18 17:13:57)

To split by mb letters, use preg_split with /u modifier instead of calling mb functions thousand times.

adjwilli at yahoo dot com (2007-12-26 09:37:58)

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;
}
?>

易百教程