4

Rubyを使用すると、出力ファイルに書き込まれる変数の一部で一重引用符と二重引用符を自動的にエスケープするにはどうすればよいでしょうか。PHPから来て、addslashesタイプの関数を探していますが、Rubyではこれに対する簡単な解決策はないようです。

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
4

3 に答える 3

6

addslashesこのRubyコンストラクトでPHP機能をエミュレートできると思います。

.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\"
于 2012-09-07T17:03:44.380 に答える
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\""
于 2012-09-07T19:26:26.103 に答える
1

Rubyについては知りませんが、PHPではaddslashesほとんど非推奨になっていることは知っています。

データをエスケープする必要があるたびに、異なるエスケープルーチンが必要になります。HTMLには、データベース作業に対して異なるエンコーディングと処理が必要であり、各データベースには独自の特別なルールがあります。

あなたの質問から、CSVファイルに出力しようとしていると思います。これも、標準のCSVがないため、魚のやかん全体が開きます。データを作成するもの(および厳密なASCIIまたはUnicodeなど)と、どの形式のエスケープ引用符が必要になるかについて、いくつかの調査を行う必要があります。ほとんどのCSVコンシューマーは、2つの二重引用符を使用して1つの二重引用符を置き換えます。"文字列に必要な場合は、と記述し""ます。

于 2012-09-07T17:04:51.077 に答える