I don't know if you're using fgetcsv(), but you can configure it to recognize individual fields including quoted information.
This way you can read your lines in one at a time and strip the new line characters at the field level rather than having to do an expensive RegEx operation on a large file all at once.
Slightly modified php code example from the documentation (replaced delimiter with ';'):
$row = 1;
$handle = fopen("data.txt", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
data.txt
14 ; 1234,56 ; 10203 ; "ABC" ; "DFG" ; "text
text
more text"
15 ; 234,16 ; 10204 ; "ABC" ; "DFG" ; "text
text
more text"
This will be recognized as 2 lines instead of 6 because fgetcsv() will recognize the new line characters in the quotes as part of the field and not additional lines of data.