<?php
 
error_reporting(-1);
mb_internal_encoding('utf-8');
 
$text = "много их в Петербурге,молоденьких дур,сегодня в атласе да бархате,а завтра , поглядишь , метут улицу вместе с голью кабацкою...в самом деле ,что было бы с нами ,если бы вместо общеудобного правила:чин чина почитай , ввелось в употребление другое,например:ум ума почитай??какие возникли бы споры!";
// Для тестов
// $text = 'roses are red,and violets are blue.whatever you do i'll keep it for you.';
// $text = 'привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.';
 
/* Делает первую букву в строке заглавной */
function makeFirstLetterUppercase($str) {
    $str = mb_strtoupper(mb_substr($str, 0, 1)).
    mb_substr($str, 1, mb_strlen($str));
    return $str;
}
 
/* исправляет текст */
function fixText($text) {
	$regexp = '/(?<=\.{3}|\.\b|\?\b|\?{2}|\!)/u';

	$stringsArr = preg_split($regexp, $text, 0, PREG_SPLIT_NO_EMPTY);
	
	foreach($stringsArr as $el => $value){
		$stringsArr[$el] = makeFirstLetterUppercase(trim($value));
	}
	
	$stringsArr = implode("", $stringsArr);
	$stringsArr = preg_replace('/(\s*)([,:;!]|\?[?]*|\.[.]*)(\s*)/u', '$2 ', $stringsArr);
	
	return $stringsArr;
}

$result = fixText($text);
echo "{$result}\n";