我正在使用RMySQL向SQL数据库编写一些HTML代码(但我想我的问题是一个普遍的R问题,而不是与SQL或RMySQL真正相关)。所以我正在尝试这样的事情:
con <- RMySQL(...) # some connection
html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"
query <- c('INSERT INTO table (htmlfield) VALUES (\"', html, '"')
dbSendQuery(con,paste(query, collapse = ""))
麻烦的是,R的粘贴将用单引号(即'“')中的双引号替换为转义序列\”,即:
> paste(query, collapse = "")
[1] "INSERT INTO table (htmlfield) VALUES (\"<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>\""
如果我将向量查询中的单引号更改为双引号,并将html中的单引号更改为双精度,则问题出现在字符串html的一侧,因为html中的双引号会被替换为逃脱序列。
处理转义字符替换的最简单方法是什么?
我尝试了gsub('\\\"','"',html)
但没有达到预期的效果,并在Ignore escape characters (backslashes) in R strings帖子中提出了解决方案,但我无法使其发挥作用。
感谢您的关注,Philipp
答案 0 :(得分:4)
我发现您在问题中包含的内容存在两个问题。第一个看起来像拼写错误。后:
html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"
你有:
query <- c('INSERT INTO table (htmlfield) VALUES (\"', html, '"')
^^^^^^^^^^^^^^^
请注意,您要转义一个字符串而不是另一个字符串。你不需要逃避它们,但是如果你这样做并不重要。对于最后一个字符串,你也意味着'")'
,我怀疑,这是你得到的错误的真正来源。 paste
而不是c
在这里更有用。如果我将这些结合起来,我们得到:
query <- paste('INSERT INTO table (htmlfield) VALUES ("', html, '")', sep = "")
我们可以直接使用:
dbSendQuery(con, query)
第二个问题,也是许多人所做的问题,是将对象的打印表示与对象本身混淆。如果我们打印query
,我们会看到:
> query
[1] "INSERT INTO table (htmlfield) VALUES (\"<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>\")"
字符串的打印表示始终用""
双引号括起来,因此需要对内部"
进行转义。你想看的是实际的字符串。我们可以使用cat
或writeLines
执行此操作 - 我更喜欢后者,因为它会自动将"\n"
添加到字符串的末尾:
> writeLines(query)
INSERT INTO table (htmlfield) VALUES ("<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>")
注意"
现在未如何转义。这是由数据库服务器执行的SQL。如果这是您的数据库的有效SQL,那么它将起作用。
答案 1 :(得分:3)
你忘了逃避字符串中的反斜杠(我想,大多数编程语言就是这种情况,不确定R是否也是如此)。
gsub("\\\"", "\"", html)
答案 2 :(得分:3)
尝试粘贴此查询:
query <- c('INSERT INTO table (htmlfield) VALUES (\'', html, '\'')
唯一的变化是使用引号:\'
而不是"
。
总的来说:
html <- "<div style='text-align: center; font-family: Arial;'><span style='font-size: 14pt;'>Some text without any tricky symbols.</span></div>"
query <- c('INSERT INTO table (htmlfield) VALUES (\'', html, '\'')
dbSendQuery(con, paste(query, collapse = ""))
我希望它能正常工作!