Php 将utf8字符串拆分为字符数组
我试图将一个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[]
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);