This is what I came up with ... you have to check if the offer is longer than what you are looking for .. among other things, like what g13n said. Perhaps it would be better if the sentence is too short / long to chop it off and put "...". In addition, you will have to check / convert spaces, since strrpos will only look for what is given.
$maxlen = 150; $file = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer malesuada eleifend orci, eget dignissim ligula porttitor cursus. Praesent in blandit enim. Maecenas vitae eleifend est. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas pulvinar gravida tempor."; if ( strlen($file) > $maxlen ){ $file = substr($file,0,strrpos($file,". ",$maxlen-strlen($file))+1); }
if you want to use the same function, you can try the following:
function shortenString($string, $your_desired_width) { $parts = preg_split('/([\s\n\r]+)/', $string, null, PREG_SPLIT_DELIM_CAPTURE); $parts_count = count($parts); $length = 0; $last_part = 0; $last_taken = 0; foreach($parts as $part){ $length += strlen($part); if ( $length > $your_desired_width ){ break; } ++$last_part; if ( $part[strlen($part)-1] == '.' ){ $last_taken = $last_part; } } return implode(array_slice($parts, 0, $last_taken)); }
source share