Supongo que el tema está en generalizar el patrón:
Uno o varios <br /> seguido/s o no de retorno de carro será sustituido por un <br />(sin retorno de carro)
Código PHP:
function QuitarDoblesSaltos($string){
$patron = "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
$sustituto = "<br />";//sustituye por un solo salto
$cadenasalida=preg_replace ($patron,$sustituto,$string);
return $cadenasalida;
}
Yo diría que así tendría que ir...
Salu2 ;)