diff --git a/C4/ImportExportFramework.pm b/C4/ImportExportFramework.pm index 7f29e51fd1..e518771824 100755 --- a/C4/ImportExportFramework.pm +++ b/C4/ImportExportFramework.pm @@ -322,6 +322,7 @@ sub _export_table_csv my $data; while (my $hashRef = $sth->fetchrow_hashref) { for (@fields) { + $hashRef->{$_} =~ s/[\r\n]//g; $$strCSV .= '"' . $hashRef->{$_} . '",'; } chop $$strCSV; @@ -1133,6 +1134,7 @@ sub _import_table_csv my ($dbh, $table, $frameworkcode, $dom, $PKArray, $fields2Delete, $fields) = @_; my $row = ''; + my $partialRow = ''; my $numFields = @$fields; my $fieldsNameRead = 0; my @arrData; @@ -1145,6 +1147,17 @@ sub _import_table_csv my $pos = 0; while (<$dom>) { $row = $_; + # Check whether the line has an unfinished field, i.e., a field with CR/LF in its data + if ($row =~ /,"[^"]*[\r\n]+$/ || $row =~ /^[^"]+[\r\n]+$/) { + $row =~ s/[\r\n]+$//; + $partialRow .= $row; + next; + } + if ($partialRow) { + $row = $partialRow . $row; + $partialRow = ''; + } + # Line OK, process it if ($row =~ /(?:".*?",?)+/) { @arrData = split('","', $row); $arrData[0] = substr($arrData[0], 1) if ($arrData[0] =~ /^"/);