首页 文章

将文本分成两半,但是在最近的句子中

提问于
浏览
6

$ text变量的示例:

Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua . Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat . Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur . Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum .

将它分成两半:

$half = strlen($text) / 2;

会让我看到“后果”中的“o”字 .

如何在文本的一半中找到最近的句子分隔符(点)的位置?在这个例子中,在“o”之后是7个字符 .

此文本还包含HTML代码 . 我想在查找文本的半点时忽略HTML,并忽略html属性中的点等 .

3 回答

  • 3

    看看substrstrip_tagsstrpos . 在 strpos 的帮助下,您可以找到下一个点的位置,并使用strip_tags从字符串中删除所有html标记 .

    $string = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumt.';
    $string = strip_tags($string);
    $half = intval(strlen($string)/2);
    echo substr($string, 0, strpos($string, '.', $half)+1);
    

    考虑到你必须确保在 $half 的值之后存在一个点,否则输出将不是你想要的 .

    也许是这样的?

    if (strpos($string, '.', $half) !== false)
        echo substr($string, 0, strpos($string, '.', $half)+1);
    else
        echo substr($string, 0, $half) . '...';
    
  • -2

    假设你的句子可以以句号结尾的其他字符结束,你可以看一下:

    $s = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.';
    
    // find center (rounded down)
    $mid = floor(strlen($s) / 2);
    // find range of characters from center that are not ?, ! or .
    $r = strcspn($s, '.!?', $mid);
    
    // remember to include the punctuation character
    echo substr($s, 0, $mid + $r + 1);
    

    您可能需要稍微调整一下,但它应该做得很好 . 对于更高级的东西,你正在进入NLP(自然语言处理)领域,其中还有PHP库:

    http://sourceforge.net/projects/nlp/

  • 3
    function abbrevia($str, $maxChars) {    $limit=$maxChars;
        if (strlen($str)<=$maxChars) return $str;
        else while ($str[$limit]!=" " && $str[$limit]!="." && $str[$limit]!=";" && $str[$limit]!="," && $str[$limit]!="!" && $str[$limit]) $limit++;
        return substr($str,0,($limit))."...";
    }
    

    你可以修改这个功能

相关问题