В зависимости от ситуации (кажется, что люди всегда добавляют 2 разрывов строки между абзацами), вы можете сказать, что проблема заключается в следующем: заменить все новые строки, непосредственно не предшествующие или не сопровождаемые новой строкой, пробелом.
//just to be sure, remove \r's
$string = str_replace("\r",'',$string);
$string = preg_replace('/(?<!\n)\n(?!\n)/',' ',$string);
При разрешении \ r's:
$string = preg_replace('/(?<!\r|\n)\r?\n(?!\r|\n)/',' ',$string);
Редактировать: nevermind: не использовать: хотя люди, как правило, пишут текст своей электронной почты в абзацах, вы будете нарушать свою подпись / подпись с помощью этого регулярного выражения. Можно было бы поиграться с минимальной длиной линии, прежде чем считать ее «ломкой» (я выбрал 63), но с трудом это будет:
$string = preg_replace('/([^\r\n]{63,})\r?\n(?!\r|\n)/','$1 ',$string);
Проблема в том, что нет уверенности в том, что разрыв строки не был задуман. Имея неповоротливую длину строки, вы могли бы основывать ее на средних пользователях, но вопрос заключается в следующем: что они больше возражают: различия между разрывными и неразрывными параграфами или разрывом их подписей?