Für die Handballseite des TuS Griesheims habe ich für die Suchfunktion eine Highlighting Funktion in PHP geschrieben. Diese hebt bestimmte Wörter eines Textes hervor.
- die Suchoperatoren der boolschen Volltextsuche von Mysql werden entfernt
- durch Leerzeichen getrennte Suchbegriffe werden einzeln hervorgehoben
- die Suchbegriffe werden mit verschieden Farben hervorgehoben
- Sonderzeichen usw. werden escaped
- Aus dem Referrer verschiedener Suchmaschinen werden die Suchbegriffe extrahiert und hervorgehoben
function hl($text, $words) {
if(is_array($words)) {
$colors = array('#ff9999', '#ffff99', '#ff99ff', '#99ffff','#99ff99', '#9999ff');
foreach ($words as $word) {
if(!empty($word)) {
if ($i++ >= count($colors))
$i = 0;
$text = preg_replace('/(' . preg_quote($word) . ')(?![^< ]+>)/i', '${1}', $text);
}
}
}
return $text;
}
function get_search_words() {
$referer = urldecode($_SERVER['HTTP_REFERER']);
if(preg_match('/www\.google.*/i',$referer)
|| preg_match('/search\.msn.*/i',$referer)
|| preg_match('/search\.yahoo.*/i',$referer)
|| preg_match('/search\.lycos\.com/i', $referer)
|| preg_match('/search\.aol\.com/i', $referer)
|| preg_match('/ask\.com/i', $referer)
|| preg_match('/search\.netscape\.com/i', $referer)) {
if(preg_match('/(www\.google.*)|(search\.msn.*)|(ask\.com)/i',$referer))
$delimiter = "q";
elseif(preg_match('/search\.yahoo.*/i',$referer))
$delimiter = "p";
elseif(preg_match('/(search\.lycos\.com)|(search\.aol\.com)|(search\.netscape\.com)/i', $referer))
$delimiter = "query";
$pattern = "/^.*" . $delimiter . "=([^&]+)&?.*\$/i";
$query_terms = preg_replace($pattern, '$1', $referer);
}
elseif (!empty($_GET['hl'])) {
$query_terms = rawurldecode($_GET['hl']);
}
else
return false;
$search_array = escape_search_words($query_terms);
return $search_array;
}
function escape_search_words($query_terms) {
$query_ops = array('+', '-', '< ', '>', '~', '*', '"', '(', ')');
$query_terms = trim( $query_terms);
$query_terms = preg_replace('/[(' . preg_quote(implode($query_ops)) . ')]/', '', $query_terms);
$query_array = preg_split ("/[\s,\+\.]+/", $query_terms);
return $query_array;
}
Viel Spaß beim Coden…