If you look at the docs for strtoupper() and strtolower(), it says that:
Returns string with all alphabetic characters converted to uppercase.
Note that 'alphabetic' is determined by the current locale. For instance, in the default "C" locale characters such as umlaut-a (ä) will not be converted.
I'm thinking that doing a setlocale(LC_CTYPE, '%country%') at the top of your script will allow you to do string functions recogizing the accents.
The example given in the docs is:
setlocale(LC_CTYPE, 'nl_NL') for Netherlands. What locale are you handling? France?