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
For me the following worked:
$sentences = 2;
echo implode('. ', array_slice(explode('.', $string), 0, $sentences)) . '.';
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.
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 />|' => ' ',
'| |' => ' ',
'|’|' => '\'',
'|‘|' => '\'',
'|“|' => '"',
'|”|' => '"',
);
$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:
<p class="body">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?</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 …