我在视图中有这一行:
<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+") %>
它会产生结果:
"patterns":[".+\\.runsheet\\..+"]
这不是我真正想要的那个。 我的问题是如何在我的数据库中保存后保留反斜杠?
这正是我想要的:"patterns":[".+\.runsheet\..+”]
我试过这个:<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+"), class: "val_runsheet_all" %>
和结果:"patterns":[\".+\\.runsheet\\..+\”]
更新1
这是html输出:
<input type="hidden" name="ng_b2b_configuration[value][endpoints][][patterns][]" id="ng_b2b_configuration_value_endpoints__patterns_" value=".+\.runsheet\..+">
答案 0 :(得分:1)
value=".+\.runsheet\..+"
将
'.+\.runsheet\..+'
结尾,因此您在某处感到困惑。你做的任何事情(没有欺骗)都会给你一个字符串:
".+\.runsheet\..+"
在Ruby或JSON中。反斜杠在Ruby双引号字符串和JSON格式字符串中都有特殊含义。没有人需要反斜杠来逃避.
,所以也不会把它放在那里。但是因为\
在Ruby双引号字符串和JSON中具有特殊含义作为转义字符,所以单\
看起来像\\
,因为它们都必须逃避{{{1}的特殊均值。 1}},好吧,逃避转义字符。
进入\
并说:
irb
看看你得到了什么。然后说:
puts ".+\.runsheet\..+"
看看你得到了什么。第一个会给你:
puts ".+\\.runsheet\\..+"
和第二个:
.+.runsheet..+
然后你可以进行一些.+\.runsheet\..+
次调用(再次使用to_json
查看结果,以便避免puts
将使用的转义)并且您会看到类似的发生的事情。