Tak jsem to nakonec vyřešil sám
$slova = explode(" ",$zprava);
$zprava = "";
for($i = 0; $i < sizeof($slova); $i++) {
if(preg_match("#(http://[^ ]+\.[^ ]+)#", $slova[$i])) {
$cast = substr($slova[$i], 0, 20);
if(strlen($slova[$i]) > 20) {
$odkaz = "<a href=\"\\1\" target=\"\\_blank\">$cast…</a>";
} else {
$odkaz = "<a href=\"\\1\" target=\"\\_blank\">$cast</a>";
}
$slova[$i] = preg_replace("#(http://[^ ]+\.[^ ]+)#", " $odkaz ", $slova[$i]);
} else {
$slova[$i] = wordwrap($slova[$i], 30, " ", 1);
}
$zprava .= " ".$slova[$i];
}