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("/&nbsp;/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("/&nbsp;/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

Reply via email to