hello! i have a problem with a search-and-highlight script (see code below):
a search for "byt tes" matches entries that contain "bytes" but only highlights "byt"*. *) because after the first search term ("byt") is found the line is modified into <span class="highlight">byt</span>es and therefore the secound search term ("tes") can't be highlighted anymore. 1. general question i'm not quite sure if a search like this should match entries that contain a combination of both terms ("bytes"). of course, the word "bytes" contains both search terms - but on the other hand, a search for "byt tes" indicates that i'm looking for TWO terms (and also for TWO "t"s). 2. how to do it anyway? do you have an idea how to accomplish that this kind of search - either: does NOT display entries that match "bytes" - or: displays entries that contain "bytes" and highlights "bytes" (because both solutions seem to be somehow logical it may depend on the easiness of creation and/or the speed of processing.) thanks a lot for your effort!! best wishes philipp www.ipdraw.org --- code notes: - the highlight/preg_replace part is built to skip html tags. - if you have any other suggestions for improvements, please let me know. if (isset($src)) { if (preg_match("/[A-z]/", $src) | preg_match("/[0-9]/", $src)) { $src = stripslashes($src); $src = preg_replace("/\,/i", " ", $src); $src = html_entity_decode($src); $src = preg_replace("/ /i", " ", $src); $src = preg_replace("/[[:space:]]+/i", " ", $src); $src = trim($src); $handle = fopen($entries, "r"); $i = 1; $results = 0; while ($i <= $dbs_total) { $buffer = fgets($handle, 4096); $buffer_raw = strip_tags($buffer); $buffer_raw = preg_replace("/ /i", " ", $buffer_raw); $words = explode(' ', $src); $t = 0; $test='return('; foreach($words as $word) { if($t>0)$test.=' && '; $test.='strstr($buffer_raw,\''.$word.'\')'; $t++; } $test.=');'; // 01:A if (eval($test)) { foreach($words as $word) { $wordreg = preg_replace('/([\.\*\+\(\)\[\]])/','\\\\\1',$word); $buffer = preg_replace('/(<)([^>]*)('.("$wordreg").')([^<]*)(>)/sei',"'\\1'.preg_repla ce('/'.(\"$wordreg\").'/i','###','\\2\\3\\4').'\\5'",stripslashes($buffer)); $buffer = preg_replace('/('.$wordreg.')/si','<span class="highlight">\\1</span>',stripslashes($buffer)); $buffer = preg_replace('/###/si',$word,$buffer); } echo $buffer; $results++; } $i++; } fclose ($handle); } else { $illegal_src = 1; } } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php