Php 将utf8字符串拆分为字符数组

Php 将utf8字符串拆分为字符数组,php,utf-8,Php,Utf 8,我试图将一个utf8编码的字符串拆分为一个字符数组。我现在使用的函数过去可以工作,但由于某种原因它不再工作了。原因可能是什么。更好的是,我怎样才能修复它 这是我的字符串: 泽尔夫·赫布·马尔·弗拉格:本·吉是谁 这是我的职责: function utf8Split($str, $len = 1) { $arr = array(); $strLen = mb_strlen($str); for ($i = 0; $i < $strLen; $i++) { $arr[]

我试图将一个utf8编码的字符串拆分为一个字符数组。我现在使用的函数过去可以工作,但由于某种原因它不再工作了。原因可能是什么。更好的是,我怎样才能修复它

这是我的字符串:

泽尔夫·赫布·马尔·弗拉格:本·吉是谁

这是我的职责:

function utf8Split($str, $len = 1)
{
  $arr = array();
  $strLen = mb_strlen($str);
  for ($i = 0; $i < $strLen; $i++)
  {
    $arr[] = mb_substr($str, $i, $len);
  }
  return $arr;
}

PHP中有一个多字节分割函数。

对于
mb.
函数,您应该指定字符集编码

在您的示例代码中,特别是以下两行:

$strLen = mb_strlen($str, 'UTF-8');
$arr[] = mb_substr($str, $i, $len, 'UTF-8');
全貌:

function utf8Split($str, $len = 1)
{
  $arr = array();
  $strLen = mb_strlen($str, 'UTF-8');
  for ($i = 0; $i < $strLen; $i++)
  {
    $arr[] = mb_substr($str, $i, $len, 'UTF-8');
  }
  return $arr;
}
preg_split
旁边还有


46个数组-41个数组中的一个

我发现é不是我期望的角色。显然,né和ńe之间有区别。我首先让它通过字符串工作。

如果您不确定mb_字符串函数库的可用性,请使用:

第1版:

function utf8_str_split($str='',$len=1){
    preg_match_all("/./u", $str, $arr);
    $arr = array_chunk($arr[0], $len);
    $arr = array_map('implode', $arr);
    return $arr;
}
第2版:

function utf8_str_split($str='',$len=1){
    return preg_split('/(?<=\G.{'.$len.'})/u', $str,-1,PREG_SPLIT_NO_EMPTY);
}
函数utf8\u str\u split($str='',$len=1){
返回preg_split('/(?这是最好的解决方案!:

我发现这个很好的解决方案

它的工作速度非常快:

在PHP5.6.18中,它在几秒钟内分割出一个6MB的大文本文件

最棒的是,它不需要多字节(mb)支持


同样的答案。

定义“不工作”。它做什么不应该做和/或它不做什么不应该做?俎部分没有按它应该做的分开解决方案:我用:mb_internal_encoding('UTF-8')全局指定编码;应该设置它(但它也设置HTTP输入和输出编码),您可以分析字符串(例如)并直接检查字符串编码,我怀疑编码设置不正确,或者字符串的字符集编码不是UTF-8。您能澄清这个答案吗?一定要设置
mb_regex_encoding()
mb_internal_encoding("UTF-8"); 
function utf8_str_split($str='',$len=1){
    preg_match_all("/./u", $str, $arr);
    $arr = array_chunk($arr[0], $len);
    $arr = array_map('implode', $arr);
    return $arr;
}
function utf8_str_split($str='',$len=1){
    return preg_split('/(?<=\G.{'.$len.'})/u', $str,-1,PREG_SPLIT_NO_EMPTY);
}
preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY);