PHP: come evidenziare i risultati di una ricerca in una pagina HTML
di eugyAvete presente Google quando visualizzate in HTML una pagina PDF risultato di una ricerca, che vi fa vedere evidenziate le parole chiave che avete scelto? Beh, si può fare abbastanza velocemente in PHP!
Per farlo si possono usare le funzioni ob_start() e ob_end_flush() che permettono di bufferizzare l’output generato tra di esse e di passarlo ad una funzione di callback prima di visualizzarlo. Nella funzione di callback si può usare allora eregi_replace() per sostituire le parti di testo che ci interessano con la stessa parte evidenziata.
Ecco il codice:
// funzione che sostituisce il contenuto del buffer
function callback($buffer) {
global $cerca;
// sostituisce tutto quello che non è in un tag con la stessa cosa evidenziata in CSS
if($cerca) return (eregi_replace("(>[^<]*)($cerca)([^>]*<)", "\\1<span class=\"highlighted\">\\2</span>\\3", $buffer));
return $buffer;
}
if($cerca) ob_start("callback"); // inizia il buffer
print "Il mio contenuto";
if($cerca) ob_end_flush(); // termina il buffer
Fatto! L’espressione regolare è case insensitive (eregi_replace() invece di ereg_replace()) e corrisponde a tutto quello che sta fuori di <>, non sostituendo quindi parole chiave ad esempio all’interno di url nei tag <a>.
Basterà impostare una classe nel CSS che evidenzi ad esempio in giallo:
.highlighted {
background-color: yellow;
}

