2012-09-07 40 views
4

使用Ruby我將如何能夠在寫入輸出文件的某些變量中自動轉義單引號和雙引號。來自PHP我正在尋找一個addslashes類型的函數,但在Ruby中似乎沒有一個簡單的解決方案。在Ruby中是否存在addslashes等價物?

require "csv" 

def generate_array(file) 
    File.open("#{file}" + "_output.txt", 'w') do |output| 
     CSV.foreach(file) do |img, _, part, focus, country, loc, lat, lon, desc, link| 
      output.puts("[#{lat}, #{lon}, '#{img.downcase}', '#{part}', '#{loc}', '#{focus}', '#{country}', '#{desc}', '#{link}'],") 
     end 
    end 
end 

ARGV.each do |file| 
    generate_array(file) 
end 
+0

輸出是純文本,格式是一種二維數組風格,在一個JavaScript程序我正在使用。 例如[123.123,123.123,'img','part','loc'... etc], 當其中一個字符串變量包含單引號時會出現問題。 –

+1

如果輸出應該在JavaScript中使用,爲什麼不節省大量的時間和精力並使用JSON? JSON定義良好,並且具有豐富的庫支持:您只需構建正確的Ruby數據結構,在其上調用'to_json',然後轉到更有趣的問題。 –

+0

raina77ow,並且mu太短是的,這似乎是它的方式。謝謝 –

回答

5

我想你可以模擬PHP addslashes功能與此紅寶石構建:

.gsub(/['"\\\x0]/,'\\\\\0') 

例如:

slashed_line = %q{Here's a heavily \s\l\a\s\h\e\d "string"} 
puts slashed_line.gsub(/['"\\\x0]/,'\\\\\0') 
# Here\'s a heavily \\s\\l\\a\\s\\h\\e\\d \"string\" 
+0

謝謝。這似乎是我的問題的答案。 –

+1

嗯,我剛剛回答了所問的問題(因爲有人可能會精確地查找它)。但在你的情況下,我可能會完全放棄'addslashes'的方法 - 然後去JSON。 ) – raina77ow

1

我不知道紅寶石,但我知道,在PHP addslashes已被棄用。

每次需要轉義數據時,它都需要一個不同的轉義例程。 HTML需要對數據庫工作進行不同的編碼和處理,並且每個數據庫都有其特殊的規則。

我想你的問題是你正在尋找輸出的東西到CSV文件。由於沒有標準的CSV,這又一次打開了一整串魚。您需要對數據的製作方式(以及是否使用嚴格的ASCII或Unicode或其他內容)以及需要哪種格式的轉義引號進行研究。大多數CSV用戶使用兩個雙引號替換單個雙引號。如果您的字符串中需要",請寫下""

+2

有一個CSV標準:[RFC 4180](http://tools.ietf.org/html/rfc4180) – Joey

+1

哦,我知道有。在過去的20年裏,我也一直在做數據轉換,並且有很多系統要麼早於CSV,要麼自己推出自己的系統。 –

+0

@Joey - 感謝您的編輯。誦讀困難的樂趣。 –

3

還有String#dump

slashed_line = %q{Here's a heavily \s\l\a\s\h\e\d "string"} 
puts slashed_line.dump 
#=> "Here's a heavily \\s\\l\\a\\s\\h\\e\\d \"string\"" 
+0

紅寶石再次閃耀! – Mirko

相關問題