PHP - get first two sentences of a text?

后端 未结 9 1988
慢半拍i
慢半拍i 2021-02-05 22:52

My variable $content contains my text. I want to create an excerpt from $content and display the first sentence and if the sentence is shorter than 15

9条回答
  •  春和景丽
    2021-02-05 23:42

    Here's a function modified from another I found online; it strips out any HTML, and cleans up some funky MS characters first; it then adds in an optional ellipsis character to the content to show that it's been shortened. It correctly splits at a word, so you won't have seemingly random characters;

    /**
     * Function to ellipse-ify text to a specific length
     *
     * @param string $text   The text to be ellipsified
     * @param int    $max    The maximum number of characters (to the word) that should be allowed
     * @param string $append The text to append to $text
     * @return string The shortened text
     * @author Brenley Dueck
     * @link   http://www.brenelz.com/blog/2008/12/14/creating-an-ellipsis-in-php/
     */
    function ellipsis($text, $max=100, $append='…') {
        if (strlen($text) <= $max) return $text;
    
        $replacements = array(
            '|

    |' => ' ', '| |' => ' ', '|’|' => '\'', '|‘|' => '\'', '|“|' => '"', '|”|' => '"', ); $patterns = array_keys($replacements); $replacements = array_values($replacements); $text = preg_replace($patterns, $replacements, $text); // convert double newlines to spaces $text = strip_tags($text); // remove any html. we *only* want text $out = substr($text, 0, $max); if (strpos($text, ' ') === false) return $out.$append; return preg_replace('/(\W)&(\W)/', '$1&$2', (preg_replace('/\W+$/', ' ', preg_replace('/\w+$/', '', $out)))) . $append; }

    Input:

    The latest grocery news is that the Kroger Co. is testing a new self-checkout technology. My question is: What’s in it for me?

    Kroger said the system, from Fujitsu,

    Output:

    The latest grocery news is that the Kroger Co. is testing a new self-checkout technology. My question is: What's in it for me? Kroger said the …

提交回复
热议问题