字符串中的反斜杠返回两个反斜杠

时间:2011-07-20 11:36:56

标签: ruby regex string escaping

我输入了此访问令牌值

864876322670016 \ u00257C4e1d481ecad9eb45b9386745.1-1026038548 \ u00257ChuA8v7lgo7-hRr2AjbUBd3shek

在表单上,​​但它返回时使用双反斜杠,如此

864876322670016 \\ u00257C4e1d481ecad9eb45b9386745.1-1026038548 \\ u00257CshuA8v7lgo7-hRr2AjbUBd3shek

我将此值传递给Facebook GraphAPI,这会返回错误。

如何获得返回用单个反斜杠替换双反斜杠?或者有没有办法让双反斜杠不出现?

2 个答案:

答案 0 :(得分:6)

你确定它实际上带有双反斜杠吗?带有反斜杠的内部字符串看起来像是有双反斜杠,因为Ruby正在逃避它们:

> a = 'aaa\bbb\ccc'
=> "aaa\\bbb\\ccc"           # Looks like doubles
> a
=> "aaa\\bbb\\ccc"
> a.inspect
=> "\"aaa\\\\bbb\\\\ccc\""   # Looks even worse
> puts a
aaa\bbb\ccc                  # ...but it isn't

但如果他们双反斜杠,你可以这样做:

> puts aa
aaa\\bbb\\ccc                # String with double backslash
> aa.gsub!("\\\\", "\\")
> puts aa
aaa\bbb\ccc

答案 1 :(得分:1)

它只是以转义形式显示的方式。您的错误可能在其他地方。

这是对输出的常见误解,当你第一次看到它时有点混乱,正如Casper指出的那样。

来自this question/answer,此人的问题基本相同:

  该死的。我忘了,当结果以双引号显示时,它显示它已转义。

还有一个关于这个感知问题的简短讨论in this blog post