[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[kagemai-users:0039] Re: kagemai-0.8.0 release



>>>>> In [kagemai-users : No.0038] 
>>>>>	HOSONO Hidetomo <h12o@xxxxxxxx> wrote:
>    (対策) Project.save_config()で、保存される文字列に対して
>    gsub("'","\\'")メソッドを適用 > project.rb_gsub.patch

"\\\\'" でしょうか。

  t = "a'b"
  puts t                   # 表示: a'b
  puts t.gsub("'","\\'")   # 表示: abb
  puts t.gsub("'","\\\\'") # 表示: a\'b

ただ、文字列中に \' があるとどちらにしてもまずいように思います。
最近のruby-list(ruby-devだったかも)でも話題になっていましたが
String#dumpを使うというのはどうでしょうか。

  t = "a\\'b"
  puts "ORIG: " + t

  def test(str)
    puts "INPUT: " + str
    begin
      eval(str)
      puts "OK: #{str}"
    rescue SyntaxError
      puts "ERROR: #{str}"
    end
  end


  test "'" + t.gsub("'","\\'") + "'"
  test "'" + t.gsub("'","\\\\'") + "'"
  test t.dump

を実行すると

  ORIG: a\'b
  INPUT: 'a\bb'
  OK: 'a\bb'
  INPUT: 'a\\'b'
  ERROR: 'a\\'b'
  INPUT: "a\\'b"
  OK: "a\\'b"

となります。

-- 
やまだあきら / akira yamada  <http://arika.org/>
(akira@xxxxxxxxx, akira@xxxxxxxxxxxxx or akira@xxxxxxxxxxx)