我正在尝试将 utf8 编码的字符串拆分为字符数组。我现在使用的功能用于工作,但由于某种原因它不再起作用。可能是什么原因。更好的是,我该如何解决?
这是我的字符串:
Zelf heb ikmaaréénvraag:wie ben jij?
这是我的功能:
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;
}
结果如下:
Array
(
[0] => Z
[1] => e
[2] => l
[3] => f
[4] =>
[5] => h
[6] => e
[7] => b
[8] =>
[9] => i
[10] => k
[11] =>
[12] => m
[13] => a
[14] => a
[15] => r
[16] =>
[17] => e
[18] => ́
[19] => e
[20] => ́
[21] => n
[22] =>
[23] => v
[24] => r
[25] => a
[26] => a
[27] => g
[28] => :
[29] =>
[30] => w
[31] => i
[32] => e
[33] =>
[34] => b
[35] => e
[36] => n
[37] =>
[38] => j
[39] => i
[40] => j
[41] => ?
)
答案 0 :(得分:14)
这是最好的解决方案!:
我在PHP manual pages找到了这个不错的解决方案。
my_list
它运作得非常快:
在PHP 5.6.18中,它会在几秒钟内分割出一个6 MB的大文本文件。
最重要的是。它不需要MultiByte(mb_)支持!
类似的答案here。
答案 1 :(得分:11)
对于mb_...
函数,您应指定charset编码。
在您的示例代码中,这些特别是以下两行:
$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;
}
因为你在这里使用UTF-8。但是,如果输入没有正确编码,那么这将不再“工作” - 只是因为它没有为其他东西设计。
您可以使用PCRE正则表达式替代地处理UTF-8编码的字符串,例如,这将以较少的代码返回您要查找的内容:
$str = 'Zelf heb ik maar één vraag: wie ben jij?';
$chars = preg_split('/(?!^)(?=.)/u', $str);
preg_split
旁边还有mb_split
。
答案 2 :(得分:4)
如果您不确定mb_string函数库的可用性,请使用:
版本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);
}
在PHP5中测试了这两个函数
答案 3 :(得分:2)
PHP中有一个多字节分割函数,mb_split
。
答案 4 :(得分:1)
我发现é不是我期望的角色。显然,né和ñe之间存在差异。我首先通过normalizing字符串工作。
答案 5 :(得分:0)
mb_internal_encoding("UTF-8");
46个数组 - 关闭41个阵列