php str_split()每个带有重音的n个字符

时间:2017-02-08 19:37:12

标签: php split special-characters

我这个代码每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,但没有成功,因为我无法找到合适的正则表达式......什么是正确的代码?

2 个答案:

答案 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);