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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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', '<span>${1}</span>', $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…

0 Responses to “Search highlighting via Referrer”