我这个代码每3个字符拆分一个字符串,工作正常,但是重音是混乱的:
$splitted_array = str_split('waderòrò',3);
但输出
print_r($splitted_array ); >> Array ( [0] => wad [1] => er▯ [2] => ▯r▯ [3] => ▯ )
我知道已经问过类似的问题,但这个问题对我没有帮助。 ucwords and french accented lettres encoding。我确实尝试过mb_split,但没有成功,因为我无法找到合适的正则表达式......什么是正确的代码?
答案 0 :(得分:4)
用户“veszelovszki at gmail dot com”将以下解决方案发布到PHP str_split手册页。它是str_split()函数的多字节安全变体。
function mb_str_split($string, $split_length = 1)
{
if ($split_length == 1) {
return preg_split("//u", $string, -1, PREG_SPLIT_NO_EMPTY);
} elseif ($split_length > 1) {
$return_value = [];
$string_length = mb_strlen($string, "UTF-8");
for ($i = 0; $i < $string_length; $i += $split_length) {
$return_value[] = mb_substr($string, $i, $split_length, "UTF-8");
}
return $return_value;
} else {
return false;
}
}
答案 1 :(得分:0)
我今天遇到了同样的问题,我正在使用here is the solution。它基本上使用正则表达式。
$re = '/\w{3}/u';
$str = 'waderòròцчшщ中华人民共和国';
preg_match_all($re, $str, $matches);
// Print the entire match result
print_r($matches);