2013-04-04 61 views
1

在我的result.csv.erb中,我在創建csv時遇到了問題,並且在結果的某些列中出現了數據溢出問題。生成CSV創建問題,因爲我在數據中有引號或逗號

我有一個稱爲標題的列,其格式可以是Son's of fortuneLove,Fear,Hatred。在第一種情況下,出於某種原因,我在我的結果中得到了&。另一方面,數據被分割,默認爲: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; 

我願意在絕對必要時插入之前編輯數據。那麼有什麼想法?

回答

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 
%> 
+0

這我嘗試的第一件事...我出於某種原因得到了未定義的方法。是因爲它是一個.csv.erb文件嗎? – 2013-04-04 21:17:49

0

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

+2

更好打電話.html_safe因爲在這裏完成http://stackoverflow.com/questions/7358509/rails3-csv-putting-quotquot-instead-of-actual-quotes – 2013-04-04 18:29:53

+0

是的,那將是很好的工作,以防萬一 – 2013-04-05 04:50:49

1

我會按照上https://en.wikipedia.org/wiki/Comma-separated_values建議。沒有標準的CSV格式,但「邁向標準化」部分提供了一些很好的建議。適用於您的部分是:

  • 應該引用包含換行符,雙引號和/或逗號的字段。 (如果它們不是,則該文件可能無法正確處理)。

  • 字段中的(雙)引號字符必須用兩個(雙)引號字符表示。

因此,如果該字段有逗號,用雙引號把它包起來。如果該字段有雙引號,請用兩個雙引號替換它。帶有單引號的字段應該用雙引號括起來,否則不需要修改。