Codice PHP:
##Supponete che sia il campo di della tabella risultato dalla ricerca, ovviamente alcune delle parole cercate esisteranno.
$text = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut nec tortor. Nulla molestie purus quis felis. Sed condimentum, est non blandit placerat, elit diam tempor lorem, sit amet ornare orci mauris nec dui. Duis in tortor. In nibh dolor, egestas sed, rutrum nec, elementum quis, ligula. In nonummy risus vel nibh. In posuere massa commodo nibh lobortis laoreet. Duis ipsum. Ut sed ligula id dui molestie ultrices. Sed vitae dolor. Sed viverra felis facilisis neque. Vestibulum id eros. Donec non eros. Vivamus odio. Fusce dictum felis malesuada purus. Sed fringilla lorem vel sapien. Aenean rutrum facilisis nisi.";
## Setto i parametri e le funzioni per pulire i le parole chiave usate per la ricerca.
$clear = array(',', ';', '?', '!', '"', '£', '$', '%', '/', '\\','(', ')', '=', '\'', '.');
$replace = " ";
##Toglie gli spazi multipli
$regex = "([[:space:]]{2,})";
$search = explode(" ", trim(preg_replace($regex, " ", str_replace($clear, $replace, trim($_POST['search'])))));
## Faccio in modo che le parole più corte di tre lettere siano considerate meno rilevanti
foreach($search as $key){
if(strlen($key)>3)
$occurrence[$key] = substr_count($text, " ".$key);
## Può essere commentato!
else
$occurrenceShort[$key] = substr_count($text, " ".$key);
}
##Se sono state cercate parole più lunghe di 3 caratteri
if(count($occurrence) != 0){
## Ordino l'array in base al numero di occorrenze in
## maniera che in occurrence[0] ci sia quella più rilevante
array_multisort($occurrence, SORT_DESC, SORT_NUMERIC);
## Creo l'array di parole da evidenziare
$relevant = array_keys($occurrence);
## Trovo la prima occorrenza della paroola più rilevante e creo
## l'anteprima di 400 caratteri
## stando però attento che 200 caratteri prima il testo esista
if(strpos($text, $relevant[0]) > 200)
$init = 200;
else
$init = strpos($text, $relevant[0]);
$highlight = substr($text, (strpos($text, $relevant[0])-$init), 300);
##Creo l'highlight
foreach($relevant as $key)
$highlight = str_replace($key, '<font style="background-color:#00CCCC ">'.$key.'</font>', $highlight);
}
##Creo l'anteprima dei primi 300 caratteri.
else{
$highlight = substr($text, 0, 300);
}
## Stampo il risultato
echo "[i][...]".$highlight."[...][/i]
";
E' un funzionamento un pò empirico ma per quel che mi serve è efficace... se avete di meglio fatemi sapere, grazie!