Well, sorry:
 > p s          gives "j\\'ai"
 > puts s       gives j\'ai
 > print s      gives j\'ai
so every four methods work if the result is properly printed
AF

Alain FELER a ñÄrit :
> Thank you very much for these four answers, but curiously none works on 
> my box ! :
> Stefan Lang :      s.gsub!("'", "\\\\'")   gives "j\\'ai" not "j\'ai"
> Timothy Hunter :   s.sub(/'/) { '\\\'' }   gives "j\\'ai"
> you :              s.gsub!(/'/, "\\\\'")   gives "j\\'ai"
> and :              s.gsub!(/'/) { "\\'" }  gives "j'ai"
> (I am using ruby 1.8.2.14 on Windows 2000 configured in french,
> and I can't even type the {} characters in irb, but I tried with Scite)
> However the ruby mysql interface escape_string method works fine.
> Thank you.
> AF
> 
> Mike Stok a ñÄrit :
> 
>>
>> On 5-Feb-06, at 5:08 PM, Alain FELER wrote:
>>
>>> I want to replace all ' by \' ? (I need it to do inserts in mysql).
>>> > s = "j'ai"
>>> > s.gsub!(/'/,'\'')
>>> > p s            ==> gives j'ai and not j\'ai as I want
>>> Thanks for help.
>>
>>
>>
>> What interface to MySQL are you using?  I know that the Ruby DBI  
>> module allows you to use place-holders in queries, and the DBI layer  
>> does the escaping for you e.g.
>>
>>    dbh.do("INSERT INTO people (id, name, height) VALUES(?, ?, ?)",
>>            nil, "Na'il", 76)
>>
>>  The resulting statement produced by do and sent to the server looks  
>> like this:
>>
>>    INSERT INTO people (id,name,height) VALUES(NULL,'Na\'il',76)
>>
>> (stolen from http://www.kitebird.com/articles/ruby-dbi.html) or if  
>> you are using the ruby mysql interface then (from http:// 
>> www.kitebird.com/articles/ruby-mysql.html)
>>
>>   Using escape_string, the platypus record might be inserted as  follows:
>>
>>    name = dbh.escape_string("platypus")
>>    category = dbh.escape_string("don't know")
>>    dbh.query("INSERT INTO animal (name, category)
>>            VALUES ('" + name + "','" + category + "')")
>>
>> Hope this helps,
>>
>> Mike
>>