diff options
author | Ivan Kohler <ivan@freeside.biz> | 2022-05-23 15:06:34 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2022-05-23 15:06:34 -0700 |
commit | b0984bceb961f1a6cd12cd70fb824dd8c2a8ecd9 (patch) | |
tree | 929e4211171e4f2b9fbbcd265348e347dd38c663 | |
parent | cc7fbf9f532b64587eed1244218b6611a72d004f (diff) |
properly deal with broadsoft's awful non-standard quoting, RT#86028, RT#81941
-rw-r--r-- | FS/FS/cdr/broadsoft.pm | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/FS/FS/cdr/broadsoft.pm b/FS/FS/cdr/broadsoft.pm index 01755a8..ab48150 100644 --- a/FS/FS/cdr/broadsoft.pm +++ b/FS/FS/cdr/broadsoft.pm @@ -23,12 +23,17 @@ use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker ); sep_char => ',', disabled => 0, + #deal with broadsoft's awful non-standard CSV escaping :/ row_callback => sub { my $line = shift; - #try to deal with broadsoft's awful non-standard CSV escaping :/ - $line =~ s/\\,/ /g; # \, becomes just a space... not entirely accurate, - # but better than skewing data into the wrong fields - $line =~ s/\\\\/\\/g; # undo double backslashes? none in my test data + $line = qq("$line"); # put " at the beginning and end + $line =~ s/(?<!\\),/","/g; # all commas not after a \ become "," + $line =~ s/\\,/,/g; # and now we can turn \, into , + #XXX embedded \r and \n ? none in my test data, and might be better to + # leave escaped and deal with it from there? + $line =~ s/\\\\/\\/g; # undo double backslashes? none in my test data + + #and now we have a properly formed CSV line $line; }, |