1

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

我有一个名为 title 的列,其格式可以是Son's of fortune, 或Love,Fear,Hatred. 在第一种情况下,由于某种原因,我的结果中得到了 " 。另一方面,数据被 分割,默认 :col_sep 是 ,。

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

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

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

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

4

3 回答 3

8

默认情况下,rails3 中的所有字符串都是不安全的,因此您需要在行上调用#html_safe。从这个答案

<%=
response.content_type = 'application/octet-stream'
CSV.generate do |csv|
  @persons.each do |person|
    csv << [ person[:name], person[:nickname] ]
  end
end .html_safe
%>
于 2013-04-04T18:31:06.113 回答
1

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

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

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

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

于 2013-04-04T19:25:36.813 回答
0

您可以使用从结果中删除它YOUR_STRING.gsub("&quot","")

于 2013-04-04T17:58:33.980 回答