2012-09-07 36 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

相关问题