Bem, há algum tempo tive que normalizar uma string para que pudesse ser usada em uma url amigável.
Eu usei preg_replace que usa regexp e é muito mais simples neste caso. Claro, minha solução é baseada no que eu precisava naquele momento, então você pode precisar de algumas mudanças se quiser usar. Mesmo assim vale a pena compartilhar e dar uma olhada.
function normalizeString ($ name) {
// Tudo em minúsculas
$ name = strtolower ($ name);
// Just normal vogals must remain
$name = preg_replace('/[aáàãâäAÁÀÃÂÄ]/', 'a', $name);
$name = preg_replace('/[eéèêëEÉÈÊË]/', 'e', $name);
$name = preg_replace('/[iíìîïIÍÌÎÏ]/', 'i', $name);
$name = preg_replace('/[oóòõôöOÓÒÕÔÖ]/', 'o', $name);
$name = preg_replace('/[uúùûüUÙÚÛÜ]/', 'u', $name);
$name = preg_replace('/[cçCÇ]/', 'c', $name);
// No more than 1 space sequentially
$name = preg_replace('/s{2,}/', ' ', $name);
// Spaces must became underscores
$name = preg_replace('/ /', '_', $name);
// Just letters and numbers
$name = preg_replace('/[^a-z0-9_]/', '', $name);
return $name;
}