prueba con
Código PHP:
$texto=str_replace("\.( )*([a-z])",". ".strtoupper("\\2"),$texto);
aunque no estoy muy seguro de que funcione ahí strtoupper con el fragmento encontrado...
la otra oción, como tú dices, serïa más o menos esto:
Código PHP:
$frases=explode(".",$texto);
$texto="";
$i=1;
foreach ($frases as $frase){
if($i>1){
$texto.=".";
}
$texto.=ucfirst(strtolower($frase));
$i++;
}
no he podido probar ninguno de los 2, pero si no funcionan tendrá que ser algo muy parecido a esto