【发布时间】:2018-02-14 04:40:00
【问题描述】:
我有一个字符串:
string = "\\"
puts string
# => \
我将其插入一个新字符串并发送到数据库。但是数据库 (InfluxDB) 使用反斜杠作为转义字符,因此推送此字符串可能会导致错误。
例如,如果我将以下内容传递给 Influx,则会导致“未终止的字符串”错误:
insert_cmd = <<-TXT
INSERT INTO my_db.default.my_measurement,my_tag=1 my_val="#{string}"
TXT
我的问题是如何将字符串中的\ 替换为\\(两个实际的反斜杠)。
我可以使用 gsub("\\", "\\\\\\"),但我不明白为什么会这样,而以下却不行:
string.gsub("\\", "\\\\")
# SyntaxError: (irb):10: syntax error, unexpected $undefined, expecting end-of-input
为什么这不起作用?为什么gsub("\\", "\\\\\\") 有效?有没有更好的办法?
已解决
正如我在评论中提到的,实际上我并没有手动插入到 INSERT INTO 字符串中。我正在使用 influxdb-ruby:
INFLUXDB_CLIENT.write_point("things", time: Time.now.to_i, values: { foo: "\\" })
事实证明这是该 gem 的一个错误:https://github.com/influxdata/influxdb-ruby/issues/200
它已在 v 0.4.2 中修复,我使用的是 0.4.1
【问题讨论】: