Ich versuche herauszufinden, wie man ein Zitat wie '
durch etwas wie \'
ersetzen kann.Ersetzen "mit" in Ruby?
Wie würde ich das tun?
Ich habe
versucht"'".gsub("'","\\'")
aber es gibt nur einen leeren String. Was mache ich hier falsch?
Ich versuche herauszufinden, wie man ein Zitat wie '
durch etwas wie \'
ersetzen kann.Ersetzen "mit" in Ruby?
Wie würde ich das tun?
Ich habe
versucht"'".gsub("'","\\'")
aber es gibt nur einen leeren String. Was mache ich hier falsch?
Wie über dieses
puts "'".gsub("'","\\\\'")
\'
Der Grund dafür ist, dass \'
bedeutet nach dem Spiel in gsub (Regex) und wegen, die sie braucht mit \\'
und \
zu entkommen ist offensichtlich als \\
mit der Endungentkommen.
Beispiel
>> "abcd".gsub("a","\\'")
=> "bcdbcd"
a
nach a
mit allem, was ersetzt.
Danke für die Erklärung, dass für mich .. Ich denke, gsub hat nur einige versteckte "Features" – Earlz
Wie wäre es, dies zu tun:
"'".gsub("\\","\\\\\\\\").gsub("'","\\\\'")
Nicht schön, aber ich denke, es funktioniert ...
, dass ein Fehler sein könnte .. Oder zumindest, was meine Vorstellung von der bricht Prinzip der geringsten Überraschung.
irb(main):039:0> "life's grand".gsub "'", "\\\'"
=> "lifes grands grand"
irb(main):040:0> "life's grand".gsub "'", "\\\\'"
=> "life\\'s grand"
Ja, das ist macht keinen Sinn für mich .. sicher, ich könnte Regex dafür verwenden, aber das scheint wie Overkill. – Earlz
Die $'
Variable ist die Zeichenfolge rechts des Spiels. In der Ersetzungszeichenfolge gsub
wäre die gleiche Variable \'
- daher das Problem.
x = "'foo'"
x.gsub!(/'/, "\\'")
puts x.inspect # foo'foo
Dies sollte funktionieren:
x = "'foo'"
x.gsub!(/'/, "\\\\'")
puts x.inspect
puts x
Ein zweistufiger Ansatz, den ich tatsächlich benutzt habe ...
BACKSLASH = 92.chr
temp = "'".gsub("'", "¤'")
puts temp.gsub("¤", BACKSLASH)
=> "\'"
funktioniert nur, wenn ‚¤‘ nicht offensichtlich im Text verwendet wird ...
ich meine Antwort bearbeitet – marcgg
Ich hoffe, Sie versuchen nicht, SQL-Eingabe zu entkommen. Bereite deine Aussagen immer vor. –
Nein, es ist Code entkommen, aber nicht SQL. – Earlz