On Sat, Jul 12, 2008 at 10:29 AM, tedd <[EMAIL PROTECTED]> wrote:
> At 9:36 AM +0200 7/12/08, Giulio Mastrosanti wrote:
>>
>> Hi,
>> I have a php page that asks user for a key ( or a list of keys ) and then
>> shows a list of items matching the query.
>>
>> every item in the list shows its data, and the list of keys it has ( a
>> list of comma-separated words )
>>
>> I would like to higlight, in the list of keys shown for every item,  the
>> words matching the query,
>>
>> this can be easily achieved with a search and replace, for every search
>> word, i search it in the key list and replace it adding a style tag to
>> higlight it such as for example to have it in red color:
>>
>> if ( @stripos($keylist,$keysearch!== false ) {
>>  $keylist = str_ireplace($keysearch,'<span style="color:
>> #FF0000">'.$keysearch.'</span>',$keylist);
>> }
>>
>> but i have some problem with accented characters:
>>
>> i have mysql with  character encoding utf8, and all the php pages are
>> declared as utf8
>>
>> mysql in configured to perform queries in  a case and accent insensitive
>> way.
>> this mean that if you search for the word 'cafe', you have returned rows
>> that contains in the keyword list 'cafe', but also 'café' with the accent. (
>> I think it has to do with 'collation' settings, but I'm not investigating at
>> the moment because it is OK for me the way it works ).
>>
>> now my problem is to find a way ( I imagine with some kind of regular
>> expression ) to achieve in php a search and replace accent-insensitive, so
>> that i can find the word 'cafe' in a string also if it is 'café', or 'CAFÉ',
>> or 'CAFE',  and vice-versa.
>>
>> hope the problem is clear and well-explained in english,
>>
>> thank you for any tip,
>>
>>    Giulio
>
> Giulio:
>
> Three things:
>
> 1. Your English is fine.
>
> 2. Try using mb_ereg_replace()
>
> http://www.php.net/mb_ereg_replace
>
> Place the accents you want to change in that and change them to whatever you
> want.
>
> 3. Change:
>
> <span style="color: #FF0000">'.$keysearch.'</span>'
>
> to
>
> <span class="keysearch">'.$keysearch.'</span>'
>
> and add
>
> .keysearch
>   {
>   color: #FF0000;
>   }
>
> to your css.
>
> Cheers,
>
> tedd

I may be mistaken (and if I am, then just ignore this as ignorant
rambling), but I don't think he's wanting to replace the accented
characters in the original string. I think he's just wanting the
pattern to find all variations of the same string and highlight them
without changing them. For example, his last paragraph would look like
this:

[quote]
now my problem is to find a way ( I imagine with some kind of regular
expression ) to achieve in php a search and replace
accent-insensitive, so that i can find the word '<span
class="keysearch">cafe</span>' in a string also if it is '<span
class="keysearch">café</span>', or '<span
class="keysearch">CAFÉ</span>', or '<span
class="keysearch">CAFE</span>',  and vice-versa.
[/quote]

The best I can think of right now is something like this:

<?php

function highlight_search_terms($word, $string) {
        $search = preg_quote($word);
        
        $search = str_replace('a', '[aàáâãäå]', $search);
        $search = str_replace('e', '[eèéêë]', $search);
        /* repeat for each possible accented character */

        return preg_replace('/\b' . $search . '\b/i', '<span
class="keysearch">$0</span>', $string);
        
}

$string = "now my problem is to find a way ( I imagine with some kind
of regular expression ) to achieve in php a search and replace
accent-insensitive, so that i can find the word 'cafe' in a string
also if it is 'café', or 'CAFÉ', or 'CAFE',  and vice-versa.";


echo highlight_search_terms('cafe', $string);

?>


Andrew

Reply via email to