Это удалит новые строки в значениях атрибутов, при условии, что значения заключены в двойные кавычки:
$s = preg_replace(
'/[\r\n]+(?=[^<>"]*+"(?:[^<>"]*+"[^"<>]*+")*+[^<>"]*+>)/',
'', $s);
Предварительный просмотр утверждает, что между текущей позицией (где была найдена новая строка) и следующей >
существует нечетное число двойных кавычек. Это не учитывает значения в одинарных кавычках или угловые скобки внутри значений; оба могут быть приспособлены, если это необходимо, но это уже достаточно уродливо. ;)
После этого вы можете заменить любые оставшиеся символы новой строки пробелами:
$s = preg_replace('/[\r\n]+/', ' ', $s);
Смотрите это в действии на ideone.com.