Finalizando e juntando tudo e resolvendo o problema de acentuação:
<?php
function ucwords_improved($s, $e = array())
{
return join(' ',
array_map(
create_function(
'$s',
'return (!in_array($s, ' . var_export($e, true) . ')) ? ucfirst($s) : $s;'
),
explode(
' ',
strtolower($s)
)
)
);
}
setlocale(LC_CTYPE, 'pt_BR');
print ucwords_improved(htmlentities('ANAstÁcio pereiRA E sIlva'), array('da', 'das', 'de', 'do', 'dos', 'e'));
?>