Suchergebnisse hervorheben (Beispiel 2)

Wörter einer Suchanfrage farbig hervorheben

Weitere Beispiele

Beispiel ausführen
Man kennt das u.a. von Google. Mehrere Suchbegriffe werden durch unterschiedliche Farben hervorgehoben. Dabei dürfen innerhalb von HTML-Tags natürlich keine Ersetzungen vorgenommen werden. Die Annahme ist, dass wenn der Suchbegriff von einem > gefolgt wird, er innerhalb eines solchen Tags steht und daher ignoriert werden muss. Das erledigt im Beispiel folgender reguläre Ausdruck.
		$regexp = "/($w)(?![^<]+>)/i";
In der PHP-FAQ findet man eine weitere Lösungsvariante dieser Aufgabe. Diese kommt ohne look ahead aus. Allerdings war das Beispiel dort bei einem Benchmarktest ungefähr um den Faktor vier langsamer.
<?php
/**
* Mehrere Wörter verschiedenfarbig hervorheben
*/

function mark_words ($text$words$colors false)
{
    
// wenn kein Array mit Farbangaben übergeben wird ...
    // ... diese Standardfarben verwenden

    
if (!$colors || !is_array($colors) ) {
        
$colors = array('#ff9999''#ffff99''#ff99ff''#99ffff','#99ff99');
    }

    
$c 0;

    
// Schleife über alle Suchbegriffe
    
foreach ($words as $w) {

        
// ggf. Metazeichen im Suchbegriff escapen
        
$w preg_quote(trim($w));

        if(
$w=='') {
            continue;
        }

        
$regexp "/($w)(?![^<]+>)/i";

        
$replacement '<b style="background-color:'.$colors[$c].'">\\1</b>';

        
$text preg_replace ($regexp,$replacement ,$text);

        
$c++;
        if (
$c >= count($colors)) {
            
$c=0;
        }
    }
    return 
$text;
}

$example = <<< EOT
Um unterschiedliche Suchbegriffe bei einer Suchanfrage kenntlich zu machen, werden
diese häufig bei der Trefferanzeige farbig hervorgehoben.
Dies ist ein Beispiel dafür.
Jeder der Suchbegriffe wird dabei mit einer anderen Farbe hervorgehoben.
Ist eigentlich ganz einfach, aber der Effekt ist doch toll oder?
EOT;

$search = array('Suchbegriffe','ist''der');

echo 
mark_words($example$search);

?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff