Bueno al final arme una funcion estatica de una clase y se las dejo para ver primero si alguien puede mejorarla o para que alguien cambiando cosas les sirva.
Código PHP:
public static function ManejoTexto($str){
$array = explode(' ',$str);
// palabras que permanecen en minusculas (agregar si se necesitan mas en este array)//
$am = array('DE','Y');
// palabras que permanecen en mayusculas (agregar si se necesitan mas en este array)//
$aM = array('ZT','S.A.');
// Cadena para (USA) en caballos en mayuscula//
$cadena = '/^\([a-zA-Z]{3,3}\)/';
// Comprobacion palabra por palabra de todo el texto //
for ($i=0;$i<count($array);$i++)
{
if (in_array($array[$i],$am)) // dejo todo en minuscula //
$a = mb_strtolower($array[$i]);
// si esta en el array o en la cadena //
elseif (in_array($array[$i],$aM) || preg_match_all($cadena,$array[$i],$partes)) // dejo todo en mayuscula //
$a = strtoupper($array[$i]);
// sino armo mayuscula y minuscula la palabra //
else
$a = ucwords(mb_strtolower($array[$i])); // dejo mayuscula primera y minuscula resto //
// Array Final //
$arrayF[] = $a;
}
// Agrupacion de todas las palabras separando por espacio //
$salida = implode(' ',$arrayF);
return $salida;
}
Saludos y gracias.