PHP - get first two sentences of a text?

后端 未结 9 1883
慢半拍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:32

    For me the following worked:

    $sentences = 2;
    echo implode('. ', array_slice(explode('.', $string), 0, $sentences)) . '.';
    
    0 讨论(0)
  • 2021-02-05 23:34

    If I were you, I'd choose to pick only the first sentence.

    $t='Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vestibulum justo eu leo.'; //input text
    $fp=explode('. ',$t); //first phrase
    echo $fp[0].'.'; //note I added the final ponctuation
    

    This would simplyfy things a lot.

    0 讨论(0)
  • 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(
            '|<br /><br />|' => ' ',
            '|&nbsp;|' => ' ',
            '|&rsquo;|' => '\'',
            '|&lsquo;|' => '\'',
            '|&ldquo;|' => '"',
            '|&rdquo;|' => '"',
        );
    
        $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&amp;$2', (preg_replace('/\W+$/', ' ', preg_replace('/\w+$/', '', $out)))) . $append;
    }
    

    Input:

    <p class="body">The latest grocery news is that the Kroger Co. is testing a new self-checkout technology. My question is: What&rsquo;s in it for me?</p> <p>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 …

    0 讨论(0)
提交回复
热议问题