\' Ruby 字符串中的(反斜杠、单引号)
我正在使用 Ruby 1.8.7,尝试生成带有 \' 字符的字符串,以便创建在 MySQL 中运行的脚本。结果应该是这样的:
INSERT INTO table (name, description) values ('Joana d\'Arc', '')
但是我不能在 ruby 字符串中只得到一个反斜杠。使用以下代码:
string = "INSERT INTO table (name, description) values ('Joana d\\'Arc', '')"
我得到了以下字符串:
INSERT INTO table (name, description) values ('Joana d\\'Arc', '')
并且:
string = "INSERT INTO table (name, description) values ('Joana d\'Arc', '')"
我得到了这个字符串:
INSERT INTO table (name, description) values ('Joana d'Arc', '')
I am using Ruby 1.8.7, trying to generate a string with the \' characteres, in order to create a script for running in MySQL. The result should be like this:
INSERT INTO table (name, description) values ('Joana d\'Arc', '')
But i can't get just one backslash in a ruby string. Using the following code:
string = "INSERT INTO table (name, description) values ('Joana d\\'Arc', '')"
I got the following string:
INSERT INTO table (name, description) values ('Joana d\\'Arc', '')
And with:
string = "INSERT INTO table (name, description) values ('Joana d\'Arc', '')"
I got this string:
INSERT INTO table (name, description) values ('Joana d'Arc', '')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我建议避免编写原始 SQL,并且在这个时代,我会使用 ORM,即使是简单的数据库使用。我强烈建议使用 Sequel gem。借用 Sequel 文档中的 示例:
使用 SQLite,以交互模式启动续集 ORM,并且创建了名为“temp”的 SQLite 数据库。
这启用了日志记录,因此我们可以看到 Sequel 在与数据库对话时会做什么。
哎哟!我忘记创建表...
表已创建。
这就创建了一个数据集,这只是与表交互的一种便捷方式。
这就是回报:
ORM 会自动为您转义字符。你的工作大大简化了。
ORM 能够感知 DBM,因此它们知道何时对特定数据库进行转义。您的代码不会改变。从 SQLite 切换到 MySQL、Postgres 甚至非 SQL 数据库都很简单。
I recommend avoiding writing raw SQL, and, in this age, I'd use an ORM, even for simple DB use. I highly recommend using the Sequel gem. Borrowing from an example in the Sequel docs:
Using SQLite, that started the sequel ORM in interactive mode, and created the SQLite database called "temp".
That enabled logging so we can see what Sequel will do as it talks to the database.
Doh! I forgot to create the table...
The table is created.
That created a dataset, which is just a convenient way to talk to a table.
And, that's the payoff:
The ORM automatically escapes the characters for you. Your job is simplified greatly.
ORMs are DBM aware, so they know when to escape for a particular database. Your code doesn't change. It's trivial to switch from SQLite to MySQL, Postgres, or even non-SQL databases.
put 起作用的原因是它显示了字符串中实际的内容。裸控制台显示转义的字符串。在控制台上尝试一下:
您将得到 12。如果两个反斜杠都在那里,您应该得到 13。Hauleth
的答案应该有效。
The reason puts works is that it shows what is actually in the string. The bare console is showing the string escaped. Try this on the console:
You will get back 12. If both backslashes were there you should get 13.
Hauleth's answer should work.
使用
%q{}
表示法编写Write it using
%q{}
notation你可以试试这个:
我不知道你是否必须使用1.8.6,但如果可以的话,更新到1.9.2。它更快、更稳定,还有更多功能。
You could try this:
I don't know if you must use 1.8.6, but if you can, update to 1.9.2. Its much faster and stabler, along with many more features.