php分裂字符串在块ngrams unicode char问题

时间:2017-04-22 16:25:09

标签: php unicode

我尝试在PHP中从字符串生成n克为此我使用此函数来自:https://gist.github.com/Xeoncross/5366393

function Bigrams($word){
    $ngrams = array();
    $len = strlen($word);
    for($i=0;$i+1<$len;$i++){
        $ngrams[$i]=$word[$i].$word[$i+1];
    }
    return $ngrams;
}

$word = "abcdefg";

print_r(Bigrams($word));

可以按预期返回ngrams:

[0] => ab
[1] => bc
[2] => cd
[3] => de
[4] => ef
[5] => fg

但是对于某些Unicode字符不能按预期返回:

Ex:$ word =“Lòria”返回:

[0] => L�
[1] => ò
[2] => �r
[3] => ri

或者$ word =“пожалуйста”返回:

[0] => п
[1] => ��
[2] => о
[3] => ��
[4] => ж
[5] => ��
[6] => а
[7] => ��
[8] => л

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用面向unicode的字符串函数

function Bigrams($word){
    $ngrams = array();
    $len = mb_strlen($word);
    for($i=0;$i+1<$len;$i++){
        $ngrams[$i]=mb_substr($word, $i, 2);
    }
    return $ngrams;
}

$word = "пожалуйста";

print_r(Bigrams($word));

结果

Array
(
    [0] => по
    [1] => ож
    [2] => жа
    [3] => ал
    [4] => лу
    [5] => уй
    [6] => йс
    [7] => ст
    [8] => та
)