<?php

error_reporting(-1);
mb_internal_encoding('utf-8');

$text0 = "ну что   ???проверим-ка";
$text1 = 'roses are red,and violets are blue.whatever you do i\'ll keep it for you.';
$text2 = 'привет.есть 2 функции!!??,,preg_split и explode ,не понимаю,в чем ??между ними разница.';

function mb_ucfirst ($subj)
{
    $subj_length = mb_strlen($subj);
    
    $subj_first = mb_substr($subj, 0, 1);
    $subj_other = mb_substr($subj, 1, $subj_length);
    
    $subj_first_uc = mb_strtoupper($subj_first);
    $subj_other_lc = mb_strtolower($subj_other);
    
    $subj_ucased =$subj_first_uc.$subj_other_lc;
    
    return $subj_ucased;
}
function fixText ($text)
{
    $split_regexp = '/\\./';
    $raw_lines = preg_split($split_regexp, $text);
    
    $proper_lines = array();
    
    foreach ($raw_lines as $line) {
        $line = trim($line);
        $line = mb_ucfirst($line);
        
        $line = preg_replace('/\\s+/', " ", $line);
        
        $punctuation_regexp = '/\\s*([,.!?]+)\\s*/u';
        $line = preg_replace($punctuation_regexp, "$1 ", $line);
        
        $proper_lines[] = $line;
    }
    
    $return = implode(". ", $proper_lines);
    
    return $return;
}

$fix0 = fixText($text0);
$fix1 = fixText($text1);
$fix2 = fixText($text2);

echo "$fix0\n$fix1\n$fix2";