Newlines and commas embedded in double quotes are not a problem,
Text::CSV_XS (with binary=>1) and
Text::xSV will handle them fine. As for unescaped quotes inside quotes, I can't imagine there's a way to automate that. Personally, I'd parse the file with Text::CSV_XS and check for parse sucess, writing successfull parses to one file and unsuccessful ones to another and then escape the quotes in the bad file by hand :-(.