Новая оптимизированная версия функции function removeCarriageRreturnEndLine($text,$allLinesFlag=true) { if ($allLinesFlag) { $linesAr = explode("\n",$text); if (count($linesAr) > 1) { foreach ($linesAr as $lineNum => $lineText) { $linesAr[$lineNum] = removeCarriageRreturnEndLine($lineText,false); } $text = implode($linesAr,"\n"); } else { $allLinesFlag = false; } } if (!$allLinesFlag) { $textLen = strlen($text); if (strrpos($text,"\r") === ($textLen - 1)) { $text = substr($text,0,($textLen-1)); } } return $text; } Предыдущая версия функции(рекурсия в ней вызывается если передана одна строка и явно не указан флаг, что не требуется обрабатывать все строки) function removeCarriageRreturnEndLine($text,$allLinesFlag=true) { if ($allLinesFlag) { $linesAr = explode("\n",$text); foreach ($linesAr as $lineNum => $lineText) { $linesAr[$lineNum] = removeCarriageRreturnEndLine($lineText,false); } $text = implode($linesAr,"\n"); } else { $textLen = strlen($text); if (strrpos($text,"\r") === ($textLen - 1)) { $text = substr($text,0,($textLen-1)); } } return $text; }