如何在 ruby 中将单引号替换为反斜杠?

How to replace single quote to backslash in ruby?

为了防止sql注入,我是这样做的:

string = "105;' DROP TABLE Suppliers"
new_string = string.gsub("'", %q(\'))
p new_string
=> "105; DROP TABLE Suppliers DROP TABLE Suppliers"

这里为什么输出DROP TABLE Suppliers两次?

Ruby 将 \' 解释为对 post 匹配字符串 ($') 的反向引用。因此,您要用引号后的所有内容替换引号:

<space>DROP TABLE Suppliers
     V
"105;' DROP TABLE Suppliers"

这是对预匹配变量($`)的反向引用:

string = "105;' DROP TABLE Suppliers"
new_string = string.gsub("'", %q(\`))
p new_string

--output:--
"105;105; DROP TABLE Suppliers"

我找不到任何关于 ruby 的全局变量的反向引用的文档,所以恭喜你是 ruby 的先驱。

好消息是您不必这样做。有关更深入的信息,请阅读下面的评论。要转义单引号,您可以添加另一个单引号。所以获胜者是:

string.gsub(/'/, "''")