<?php

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

$text = "много их в Петербурге,молоденьких дур,сегодня в атласе да бархате,а завтра , поглядишь , метут улицу вместе с голью кабацкою...в самом деле ,что было бы с нами ,если бы вместо общеудобного правила:чин чина почитай , ввелось в употребление другое,например:ум ума почитай?какие возникли бы споры!";

function mb_ucfirst($str) {
	
	$letters = preg_split('//u', $str);
	
	for ($i = 0; $i < count($letters); $i++) {
		if (preg_match('/[а-яёА-ЯЁ]/u', $letters[$i])) {
			echo "$letters[$i], символ номер $i - НЕ ПРОБЕЛ, ПОВТОРЯЮ, НЕ ПРОБЕЛ\n";
			$letters[$i] = mb_strtoupper($letters[$i]);
			break;
		}
	}
	
	return implode("", $letters);
}

function makeFirstLetterUppercase($text) {
	$sentences = preg_split("/(?<=[.?!])/u", $text);
	
	echo "Разделили на предложения\n";
	foreach ($sentences as $sentence) {
		echo "$sentence\n";
	}
	
	echo "Приступаем к ucfirst\n\n";
	
	for($i = 0; $i < count($sentences); $i++) {
		
		echo "$sentences[$i] $i - сейчас\n";
		$sentences[$i] = mb_ucfirst($sentences[$i]);
		echo "$sentences[$i] $i - теперь\n";
		
		
		// if(mb_substr($sentences[$i], 0, 1) != " ") {
		// 	mb_strtoupper(mb_substr($sentences[$i], 0, 1));
		// } elseif(mb_strlen($sentences[$i]) > 1) {
		// 	mb_strtoupper(mb_substr($sentences[$i], 1, 1));
		// }
		
		//echo "$sentences[$i] - $i предложение\n";
	}
	
	$text = implode("", $sentences);
	return $text;
}

function fixText($text) {
	$regexp = array(
		'/([,.?!:;])([а-яёА-ЯЁ])/u',
		'/([а-яёА-ЯЁ])\\s+([,.?!:;])/u',
		);
		
	$replacement = array(
		'$1 $2',
		'$1$2',
		);
		
	$text = preg_replace($regexp, $replacement, $text);
	return $text;
}

$correctText = fixText($text);
$res = makeFirstLetterUppercase($correctText);
echo "$res\n";