S'il y a bien un truc embêtant en informatique, c'est la gestion des caractères. Vous connaissez ASCII, qui est un standard qui dit que par exemple, que "A" correspond à "1000001" histoire que les ordinateurs qui n'utilisent que des 0 et 1 puissent travailler avec.

Sauf que sur terre, on ne parle pas qu'anglais et que des caractères, il y en a un paquet dont une infime partie est gérée par ASCII. Vu que les autres standards de correspondance entre les caractères ne permet pas de mélanger des caractères facilement, on a crée utf-8 qui permet de gérer un grand nombre de caractères. Manque de bol, il faudra attendre PHP6 pour qu'il soit géré nativement.

En attendant que PHP6 sortes, pour convertir un texte UTF-8 en minuscules :

$texte=mb_strtolower($texte, 'UTF-8'); 

Et une méthode efficace pour supprimer les accents avec un texte UTF-8 (le script PHP doit être encodé en UTF-8!) :

$search =explode(',','á,à,â,ä,ã,å,ç,é,è,ê,ë,í,ì,î,ï,ñ,ó,ò,ô,ö,õ,ú,ù,û,ü,ý,ÿ');
$replace=explode(',','a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,n,o,o,o,o,o,u,u,u,u,y,y');
$texte= str_replace($search,$replace,$texte);

Et pour un nom de fichier dont on veux retirer les caractères spéciaux :

$nom_fichier =  preg_replace('#[^a-zA-Z0-9\-\._]#', '_', $nom_fichier);

Et de quoi faire fonctionner des expressions régulières avec de l'UTF-8 :

$texte=utf8_decode($texte);
$mot=utf8_decode($mot);
$texte=preg_replace('#(?!<.*?)('.preg_quote($mot).')(?![^<>]*?>)#i','<span class="found">\1</span>',$texte);
$texte=utf8_encode($texte);

N'hésitez pas à en parler dans les commentaires si vous avez aussi des astuces pour gerer l'UTF-8