L'UTF-8 gère les accents normalement. Essaye plutôt <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=iso-8859-1"> pour les écritures européennes et iso-8859-15 pour gérer le iso-8859-1 + le signe euro.
UTF-8 peut encoder n'importe quel caractère unicode, et y'en à environ 100.000. Si l'utf-8 gère le japonais et le luxembourgeois, il peut parfaitement gérer les lettres accentuées. (unicode a pour vocation de réunir tous les alphabets du monde entier tel qu'il est grand mais fini)
Un petit aperçu (encore faut-il avoir les librairies correctes pour les afficher, ces alphabets):
http://ourworld.compuserve.com/homepage ... f8-jap.htm
Il faut donc juste s'assurer que les scripts php soient bien enregistrés au format utf-8 (et remettre la page dans son format originel: pour peu que des données viennent d'une DB, ça risque de foirer), et s'assurer que les chaines traitées soient bien toutes au format UTF-8.
Après, pour remplacer proprement tout les caractères spéciaux, les expressions régulières fonctionnent à merveille, du style:
preg_replace("#\W#","",$a_remplacer);
et pour les caractères accentués, j'ai péché je ne sais plus ou cette fonction:
function unaccent($text)
{
static $search, $replace;
if (!$search)
{
$search = $replace = array();
$trans = get_html_translation_table(HTML_ENTITIES);
foreach ($trans as $literal => $entity)
{
if (ord($literal) >= 192)
{
$search[] = $literal;
$replace[] = $entity[1];
}
}
}
return str_replace($search, $replace, $text);
}
Je trouve original et fonctionnel. Juste que get_html_translation_table retourne les lettres au format iso-8859-1, donc il faut faut remplacer
$search[] = $literal;
par
$search[] = utf8_encode($literal);
Et sinon, pour gérer de gros soucis avec les encodages, php contient quelques extensions bien pratiques, comme mbstring.