生成CSV创建问题,因为我在数据中有引号或逗号

时间:2013-04-04 17:51:52

标签: ruby-on-rails ruby ruby-on-rails-3 csv

在我的result.csv.erb中,我在结果的某些列中创建了csv的问题,我得到数据溢出。

我有一个名为title的列,其格式可以是Son's of fortuneLove,Fear,Hatred。在第一种情况下,出于某种原因,我在结果中得到了& quot。另一方面,数据被拆分为默认值:col_sep是,。

<%- @results.each do |result| -%>
    <%- row = result.values -%>
    <%= CSV.generate_line row, :row_sep => nil, :quote_char => "'" %>
<%end%>

对于eg-:标题是Gas Shoe (Grey, Chestnut),结果溢出到其他列

title - &quot;Gas Shoe (Grey
seller -  Chestnut)&quot;   

如果绝对必要,我愿意在插入之前编辑数据。那么任何想法?

3 个答案:

答案 0 :(得分:8)

默认情况下,rails3中的所有字符串都是不安全的,因此您需要在行上调用#html_safe。来自this answer

<%=
response.content_type = 'application/octet-stream'
CSV.generate do |csv|
  @persons.each do |person|
    csv << [ person[:name], person[:nickname] ]
  end
end .html_safe
%>

答案 1 :(得分:1)

我会按照https://en.wikipedia.org/wiki/Comma-separated_values的建议。没有标准的CSV格式,但“迈向标准化”部分提供了一些很好的建议。适用于您的部分是:

  • 应引用包含换行符,双引号和/或逗号的字段。 (如果不是,则文件可能无法正确处理。)

  • 字段中的(双)引号字符必须由两个(双)引号字符表示。

因此,如果该字段有逗号,请用双引号括起来。如果该字段具有双引号,则将其替换为两个双引号。带单引号的字段应该用双引号括起来,否则不需要修改。

答案 2 :(得分:0)

您可以使用YOUR_STRING.gsub("&quot","")

从结果中删除该内容