I am using a word limitor from code ignitor. My database spits out a string for the homepage and since its too long to fit this code adds an '...' at the end that is linked to the corresponding page. Recently I have come across a problem in which if I have a comma in a certain place we get a ',...' which to me looks messy. So I decided to change the code in order to limit the string to a certain amount of words, at which point if the string ends in a comma after limiting, then we change the limitor amount to -1. Unfortunately the code is not working and I do not see where I am going wrong.
// limits a string to X number of words.
function word_limiter($str, $limit = 100, $link_end = '', $end_char = '…')
{
if (trim($str) == '') {
return $str;
}
// modified
$cfc = preg_match('/^\s*+(?:\S++\s*+){1,' . (int) $limit . '}/', $str, $matches);
if (substr($cfc, -1) == ',') {
$limit_minus = $limit-1;
preg_match('/^\s*+(?:\S++\s*+){1,' . (int) $limit_minus . '}/', $str, $matches);
}
if (strlen($str) == strlen($matches[0])) {
$end_char = '';
}
if (empty($link_end)) {
return rtrim($matches[0]) . $end_char;
} else {
$end = '<a href="'.$link_end.'">'.$end_char.'</a>';
return rtrim($matches[0]) . $end;
}
}