Re: Re: string highlight

From: Date: Wed, 08 Jun 2005 13:51:43 +0000
Subject: Re: Re: string highlight
References: 1 2 3 4  Groups: php.general 
Request: Send a blank email to php-general+get-216612@lists.php.net to get a copy of this message
On 6/8/05, John Nichel <john@kegworks.com> wrote: > Rory Browne wrote: > > On 6/8/05, David Duong <david@forizon.org> wrote: > > > >>Sebastian wrote: > >> > >>>i'm looking for a function that can highlight certain search terms in a > >>>string. anyone have something already made that i can plugin to my > >>>exisiting code? > >>> > >>>I found a couple but they do not work very well.. some break html code > >>>if the string contains the keywords in the html. > >>> > >>>thanks. > >> > >>You can use str_replace to "highlight" the search terms. > >> > >>For example, you could use the following code for each search term (this > >>function also accepts arrays, see > >>http://php.net/str_replace): > >> > >>str_replace ($search_term, "<b>$search_term</b>", $body_text); > > > > > > Bad idea. Very bad idea. > > > > for example ( using bold to highlight ): > > <?pseudo_code > > > > $html = "<html><body>I want to hightlight the word body in this text. > > </body></html>"; > > $search = "body"; > > > > $output = str_replace($search, "<b>$search</b>", $html); > > // $output == "<html><<b>body</b>>I want to hightlight the > > word > > <b>body</b> in this text. </<b>body</b>></html>"; > > > > // see what I mean? > > ?> > > Good catch Rory. A regex replace would work better here. > > $search = "body"; > $find = "/\b" . $search . "\b/"; > preg_replace ( $find, "<b>" . $search . "</b>", $html ); I don't think so. If I'm reading your code correctly you still have the same problem, as I outlined above. There is no simple solution to this. It either involves advanced regex(more advanced than my understanding of it), or a proper parser. <?pseudo_code function highlight_html_string($needle, $haystack); $retval = ""; $i = 0; while($i < strlen($haystack)){ $str = get_text_between_certain_point_and_first_instance_of_<($i); $str = preg_replace(what john said above); $str .= get_tag_text($i); $retval .= $str; $i += strlen($str); } return $retval; ?> > > -- > John C. Nichel > ÜberGeek > KegWorks.com > 716.856.9675 > john@kegworks.com > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >

« previous php.general (#216612) next »