I've this code to split a string every 3 characters, works fine, but accents are messed:
$splitted_array = str_split('waderòrò',3);
but it outputs
print_r($splitted_array ); >> Array ( [0] => wad [1] => er▯ [2] => ▯r▯ [3] => ▯ )
I know similar question was already asked, but this question didn't help me. ucwords and french accented lettres encoding. I did try mb_split, but without success, because I wasn't able to find the right regex... What would be the right code?
User "veszelovszki at gmail dot com" posted the below solution to the PHP str_split manual page. It is a multibyte-safe variation of the str_split() function.
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;
}
}
I was having the same issue today and here is the solution that I am using. It is basicly using regular expressions.
$re = '/\w{3}/u';
$str = 'waderòròцчшщ中华人民共和国';
preg_match_all($re, $str, $matches);
// Print the entire match result
print_r($matches);