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