| 
	
 | 
 Posted by Jochem Maas on 06/08/05 16:59 
Rory Browne wrote: 
> 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 
 
John is using \b in his regexp to denote a word boundary - I don't believe 
< counts as a boundary char therefore niether '<body>' or '<body bla="bla">' 
would be preg_replace()'d 
 
> 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 
>> 
>> 
>  
>
 
  
Navigation:
[Reply to this message] 
 |