public function excerpt(\Twig_Environment $env, $text, $phrase, $radius = 100, $ellipsis = '...')
{
if (empty($text) || empty($phrase)) {
return $this->truncate($env, $text, $radius * 2, $ellipsis);
}
$text = html_entity_decode($text, null, $env->getCharset());
$append = $prepend = $ellipsis;
$phraseLen = mb_strlen($phrase);
$textLen = mb_strlen($text);
$pos = mb_strpos(mb_strtolower($text, $env->getCharset()), mb_strtolower($phrase, $env->getCharset()));
if ($pos === false) {
return mb_substr($text, 0, $radius, $env->getCharset()) . $ellipsis;
}
$startPos = $pos - $radius;
if ($startPos <= 0) {
$startPos = 0;
$prepend = '';
}
$endPos = $pos + $phraseLen + $radius;
if ($endPos >= $textLen) {
$endPos = $textLen;
$append = '';
}
$excerpt = mb_substr($text, $startPos, $endPos - $startPos, $env->getCharset());
$excerpt = $prepend . $excerpt . $append;
return $excerpt;
}