Как обрезать длинное слово?
$text = preg_replace_callback('/[\w-]{21,}/ui',
    function ($matches) { 
        return mb_substr($matches[0], 0, 20); 
    },
$text);
Символ "-" добавил для слов через дефис, если не нужно, можете убрать.
<?php
$string = 'слово1, слово2 длинноолов1 слово3: слово4. длинноесловоболее20символов';

function getWordsFromString($string)
{
    if (preg_match_all("/\b(\w+)\b/ui", $string, $matches)) {
        return $matches[1];
    }
    return $matches;
}

$matches = getWordsFromString($string);

	foreach($matches as $key => $m) {
		if (mb_strlen($m, 'UTF-8') > 20) {
			unset($matches[$key]);
		}
	}
print_r($matches);
ВозвращаетArray ( [0] => слово1 [1] => слово2 [2] => длинноолов1 [3] => слово3 [4] => слово4 )