回答

收藏

用R中的双引号替换转义的双引号

技术问答 技术问答 237 人阅读 | 0 人回复 | 2023-09-13

我正在使用RMySQL在SQL数据库中编写一些html代码(但我想我的问题是一个通用的R问题,而不是与SQL或RMySQL真正相关的问题)。所以我正在尝试这样的事情:
, ]: g3 {! l2 Y' ?$ R/ pcon Some text without any tricky symbols."   
  G4 V$ Y. C# y5 ~" y" p    query 麻烦的是,R的粘贴会将单引号中的双引号(即““”)替换为转义序列\”,即:1 G; P- y3 G; j/ I9 N
> paste(query, collapse = "")6 _7 L7 z6 F$ o- d
[1] "INSERT INTO table (htmlfield) VALUES (\"Some text without any tricky symbols.\""
& ?5 ?0 P" T0 g, h' y) P2 t0 L如果我将向量查询中的单引号更改为双引号,并将html中的单引号更改为双引号,那么问题就出在字符串html的一边,因为之后html中的双引号被转义的序列替换了。2 Z& y* x1 d+ B" H7 K& W7 @4 v$ A
处理转义字符的最简单方法是什么?: o/ x0 I" J$ F3 u3 E
感谢您的关注,Philipp
6 R+ a) @  t* t) V                % w2 U( W' E! ~) |7 H; b+ n
解决方案:1 e5 o' [; L  I" `4 h
                7 l+ p0 `8 K) T- Q) p

( `# Y5 C" j4 \8 n! m- c  I& I; J: w! p# ]- p1 f* m' B8 o: M, O
                我发现您的问题中包含两个问题。第一个看起来像是错字。后:
/ p) A, B4 u" V" f: g: S( T. O  z, khtml Some text without any tricky symbols."1 e/ h1 S/ Q6 b% R0 z
你有:
/ ~0 s* `5 P8 Y' c! ?query 请注意,您对一个字符串进行了转义,而对另一字符串则没有。您不需要逃避它们,但是如果您这样做,则无关紧要。我还想'")'指出最后一个字符串,这是您所收到错误的真正原因。paste而不是c在这里更有用。如果将它们结合起来,我们将得到:* P# {9 P. s8 R3 m$ L
query 我们可以直接使用:& N. j+ m: _* u$ h/ Q  J
dbSendQuery(con, query)
& U  I) k/ h: e0 \9 \第二个问题,也是许多人提出的一个问题,是将对象的打印表示与对象本身混淆。如果我们打印query,我们将看到:
, U' u% F1 [( F* N2 l> query& ~: M9 a, a5 s5 d) B- h# T
[1] "INSERT INTO table (htmlfield) VALUES (\"Some text without any tricky symbols.\")"
$ r. ~  m1 T8 v# n! D字符串的打印表示形式始终用""双引号引起来,因此"需要避免内部使用。您要查看的是实际的字符串。我们可以使用-cat或writeLines-我更喜欢后者,因为它会"\n"自动将末尾添加到字符串的末尾:8 l" U, f* J% t) I2 ]
> writeLines(query)
9 Y/ T8 B8 c* z) h7 D, A  Q. a. xINSERT INTO table (htmlfield) VALUES ("Some text without any tricky symbols.")
) B2 ]$ @. @4 M3 o+ B( v) c2 n请注意,"现在如何 不进行 转义。那就是数据库服务器将要执行的SQL。如果那是对您的数据库有效的SQL,则它将起作用。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则