在PHP中如何让str_word_count()将所有UTF-8特殊字符识别为单词?

时间:2017-05-30 12:04:02

标签: php string function utf-8 special-characters

考虑以下计划:

 <?php
     $str='You & I = We';
     $arr=[];
     $arr=str_word_count($str,2,"&=");
     foreach($arr as $key=>$value){
               echo $key.'&nbsp;&nbsp;===>&nbsp;&nbsp;'.$value.'<br>';
     }
?>

输出:

0  ===>  You
4  ===>  &
6  ===>  I
8  ===>  =
10 ===>  We

现在考虑以下计划:

 <?php
     $str='You & I = We';
     $arr=[];
     $arr=str_word_count($str,2);
     foreach($arr as $key=>$value){
               echo $key.'&nbsp;&nbsp;===>&nbsp;&nbsp;'.$value.'<br>';
     }
?>

输出:

0  ===>  You
6  ===> I
10  ===> We

注意:

第1和第2函数的区别在于第1函数第3个参数

"&="

存在,但在第二个功能中不存在。

因此,第1个函数将特殊字符&=识别为单词,但第二个函数不识别。

现在考虑一下我们的字符串有很多很多特殊字符的情况。将所有这些都包括在第三个论点中可能变得不切实际。

所以这是我的问题:

有没有更简单的方法让str_word_count()函数将所有UTF-8特殊字符识别为单词而不会遇到在第三个参数中包含大量特殊字符的麻烦?

1 个答案:

答案 0 :(得分:1)

这是一种方法。

https://3v4l.org/r4ngg

正如我在评论中所写,您可以使用explode和strpos()来获取单词的单词和位置 使用strpos()的第三个周长,偏移确保您不会得到错误单词的位置 $ nextpos将始终是前一个单词结尾的位置,即使你重复两次相同的单词,它仍然会显示正确的位置。

$str ="this is a very very long text with some words repeating over and over & over again. When you use Explode() you will get an array with all the words. & using strpos( haystack, needle, & most importantly offset) you should get a good array with the positions of the words.";

$arrWords = explode(" ", $str);

$nextpos = 0;
$arrPos =array();
for ($i=0; $i <= count($arrWords)-1; $i++){

    $arrPos[$i]["Position"] = strpos($str, $arrWords[$i], $nextpos);
    $arrPos[$i]["Lenght"] = strlen($arrWords[$i]);
    $arrPos[$i]["Word"] = $arrWords[$i];
    $nextpos= $nextpos+strlen($arrWords[$i])+1;
}

var_dump($arrPos);