And what about highlighting the whole word which contains the searched term.
----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, June 21, 2003 12:31 PM
Subject: [PHP] search-and-highlight issue ("byt tes")
> 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
>
>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php