Итак, временно сделал для себя вот такую заглушку файле search.class.inc.php
function getExtract($text, $searchString, $advSearch, $highlightClass, & $nbExtr) {
if (($text !== '') && ($searchString !== '') && ($this->extractNb > 0) && ($advSearch !== 'nowords')){
if (($this->dbCharset == 'utf8') && ($this->cfg['mbstring'])) {
if (version_compare(PHP_VERSION, '5.0.0', '>=')) $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
} else {
$text = html_entity_decode($text, ENT_QUOTES);
}
// рубим входящий текст на часть до первого найденого слова и после
$text = preg_split("/" . mb_strtolower(preg_quote($searchString), "UTF-8") . "/iu", $text);
// отсекаем слева половину от лимита на длину анонса
$left = mb_substr($text['0'], -($this->cfg['extractLength'] - mb_strlen($searchString))/2);
// отсекаем справа половину от лимита на длину анонса
$right = mb_substr($text['1'], 0, ($this->cfg['extractLength'] - mb_strlen($searchString))/2);
// отрезаем слева кусок до первого пробела
$left = preg_replace("/^[^ ]* /i", "", $left);
// отрезаем справа кусок до последнего пробела
$right = preg_replace("/(.*) [^ ]*/i", "$1", $right);
// добавляем многоточия
$left = $this->cfg['extractEllips'].$left;
$right = $right.$this->cfg['extractEllips'];
// добавляем подсветку
if ($this->cfg['highlightResult']){$searchString = "<span class=\"".$highlightClass." ".$highlightClass.$rank."\">".$searchString."</span>";}
// собираем все три части
}
return $left.$searchString.$right;
}
Слова выделяет четко, режет как надо, многоточия ставит, знаки вопросов в ромбике не рисует, длинна почти соответствует заданной за вычетом двух обрезков по краям и плюс-минус слово. Образец работы —
http://www.skulsky.ru. Что делать с оригинальной функцией — ума не приложу, может тоже кто поможет, или у одного меня такая фигня?