ciao,
siccome in php le stringhe sono considerate array di caratteri, puoi ciclare con un for la stringa e esaminare carattere per carattere.
tipo così:

$text = "Ciaoooo!!! Come va??? ";
$new_text = "";

for ($i=0; $i<=strlen($text); $i++){
if ($i > 0) {
if ($text[$i] != $text[$i-1]){
$new_text .= $text[$i];
}
}
else {
$new_text .= $text[$i];
}
}

la variabile $new_text conterrà la stringa "pulita"
per i tre puntini ti basterà mettere un utleriore if nel ciclo..