Suchergebnisse hervorheben (Beispiel 3)

Wörter einer Suchanfrage farbig hervorheben

Weitere Beispiele

Beispiel ausführen
Hier eine Kombination aus den beiden vorherigen Beispielen. Neben der farbigen Markierung der Suchbegriffe wird auch jeweils die Fundstelle auszugsweise wiedergegeben.
<?php
/**
* suchergebnisse hervorheben
*/

$loc_de setlocale(LC_ALL'de_DE@euro');

$example = <<< EOT
<h2>Ein Garten</h2>
<p>
Es ist ganz gleich, ob ein Garten klein oder groß ist. <br>
Was die Möglichkeit seiner Schönheit betrifft, so ist seine Ausdehnung so 
gleichgültig, wie es gleichgültig ist, ob ein Gedicht zehn oder hundert Zeilen 
lang ist.<br>
Die Möglichkeiten der Schönheit, die sich in einem Raum von fünfzehn Schritten 
im Geviert, umgeben von vier Mauern entfalten können, sind einfach unmessbar.</p>
<p>
Du brauchst einen Baum, du brauchst ein Haus, keines für Dich allein, nur einen 
Winkel im Dach zu sitzen, zu denken, zu schlafen, zu träumen, zu schreiben, zu 
schweigen, zu sehen den Freund, die Gestirne, das Gras, die Blume, den Himmel.<br> 
Reizend ist es, still und gemächlich übers Land zu gehen und von ernsten, starken 
Bäuerinnen freundlich gegrüßt zu werden.</p>
<p>Ein solcher Gruß tut wohl wie der Gedanke an die Unvergänglichkeit. Es öffnet sich 
ein Himmel, wenn Menschen freundlich miteinander sind. Der Mensch ist inmitten der 
Natur immer das Kind an sich. Das Kind träumt wohl einmal einen schweren 
beängstigenden Traum, wenn es aber die Augen aufschlägt, so sieht es sich immer wieder 
im Paradies.</p>
<p>
Man kann einen seligen, seligsten Tag haben, ohne etwas anderes dann zu gebrauchen, als
blauen Himmel und grüne Erde. Denn ein Garten ist Ausdruck menschlichen Bestrebens, die 
Natur zu zähmen & zu ordnen; steht aber gleichsam für die Symbiose aus Phantasie und 
Perfektion.</p>
<p>(Nach von Hoffmannsthal, Mayröcker, Walser, Nietzsche und Paul)</p>
EOT;


function 
mark_hits($text$search$colors=false)
{
    
$tmp = array();
    foreach (
$search as $s) {
        
$s trim($s);
        if (
$s=='') {
            continue;
        }
        
$tmp[] = preg_quote($s);
    }
    if(!
$tmp) {
        return 
"Keine Suchebegriffe";
    }
    
$w '('.join('|',$tmp).')';
    
$n 50;
    
$r 5;
    
$max 30;
    
$text strip_tags($text);
    
$dummy preg_match_all("#(\b(.{0,$n}$w){1,$r}?(.+\b){0,4}?)#Usi",$text$matches);
    if (
$dummy) {
        
$nbr count($matches[1]);
        
$result '';
        for (
$i=0;$i<$nbr;$i++) {
            if (
$i==$max) {
                break;
            }
                
$result .= '... '.mark_words($matches[1][$i],$search,$colors).' ...<hr />';
        }
        } else {
            
$result "Die Suche nach <em>".join(' ',$search)."</em> lieferte keine Treffer.";
        }
    return 
$result;
}


function 
mark_words ($text$words$colors false)
{
    
$tmp = array();
    if (!
$colors) {
        
$colors = array('#ff9999''#ffff99''#ff99ff''#99ffff','#99ff99');
    }
    
$c 0;
    foreach (
$words as $w) {
        
$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;
}


$search 'Himmel Tag Mensch';

if (
array_key_exists('search'$_POST)){
    
$search $_POST['search'];
}

// ggf. automatisch ergaenzte Backslashes entfernen ...
if (get_magic_quotes_gpc()){
    
$search stripslashes($search);


$searchwords explode(' '$search);

echo 
mark_words($example$searchwords);
echo 
'<hr>';
echo 
mark_hits($example$searchwords);


$search htmlentities($search);
echo <<< EOT
<form method="post" action="{$_SERVER['PHP_SELF']}">
<input type="text" name="search" value="
$search">
<input type="submit" value="suchen">
</form>
EOT;
?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff