【问题标题】:Distinguish quotation mark (") from backslash and quotation mark (\")区分引号 (") 与反斜杠和引号 (\")
【发布时间】:2015-10-24 00:38:35
【问题描述】:

这是我试图解决的问题的简化版本。 所以,尽量不要破解答案:)

在R中,默认情况下

'"' == '\"'

因此,当我使用

URLencode('\"')
URLencode('"')

我得到了同样的结果:%22

然而,我真正想要的是

%5C%22%22 分别对应上述两个命令。

目标是将'parse "I am * \"good\"" as adj'等字符串编码成URL字符串

parse%20%22I%20am%20*%20%5C%22good%5C%22%22%20as%20adj

有什么想法吗?

==========更新=====

鉴于上述问题的困惑。我想进一步澄清: 我理解R'\"' 视为'"'。 但我希望R 自动,而不是我手动,将'\"'用户 字符串输入转换为'\\\"',同时处理'"' 的输入字符串如'"''\"',无论如何都是等价的。

【问题讨论】:

  • 可能是URLencode('\\"')?
  • 听起来您认为第一个字符串中有斜线。那没有。只有一个字符转义。要获得文字斜线,您需要转义斜线。 URLencode('\\\"') 将返回 "%5C%22"。注意nchar('\\\"')==2nchar('\"')==1。 "\" 在单引号和双引号字符串中的转义方式相同,因此 URLencode("\\\"")URLencode('\\\"') 是相同的。
  • 只是为了扩充@MrFlick 所说的内容,您可以通过尝试以下操作看到\"" 被视为完全相同的字符串:identical('"', '\"')
  • 如果您从闪亮的文本框中获取数据,那么闪亮应该为您翻译这些数据。试试:runApp(list(ui=mainPanel(textInput("userin", "input"), textOutput("userout")),server=shinyServer(function(input, output) {output$userout<- renderText({URLencode(input$userin)})})))。如果涉及shiny,您应该在问题中明确说明。您似乎遗漏了导入信息。
  • 如果您使用任何函数从文本文件或剪贴板将数据读入 R,R 将区分这两个值并自动进行适当的转义。闪亮的也是如此。 R 代码中的字符串规则与原始数据中允许的规则不同。

标签: regex r url


【解决方案1】:

R 字符串文字将反斜杠视为转义符号。如果你写\",反斜杠只是转义了",但由于它不是一个有效的转义序列,所以反斜杠被忽略了。

要编写文字反斜杠,请使用\\,双反斜杠。

URLencode('\\"') 
## => "%5c%22"
URLencode('"')
## => "%22"
URLencode('parse "I am * \\"good\\"" as adj')
## => "parse%20%22I%20am%20*%20%5c%22good%5c%22%22%20as%20adj"

IDEONE demo

【讨论】:

  • 谢谢,@stribizhev,我目前确实正在手动将 '\"' 的输入更改为 '\\\"',以便 URLencode 按我的意愿工作。但是,这是不可持续的。我想编写一个函数,使其接受用户输入并将输入'"' 正确解析为%22,并将用户输入'\"'解析为%5c%22
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 2022-01-27
相关资源
最近更新 更多