加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby(Rails)unescape一个字符串 – 撤消Array.

发布时间:2020-12-17 02:52:02 所属栏目:百科 来源:网络整理
导读:一直在乱砍几个库,并遇到一个字符串被“双重逃脱”的问题. 例如: 固定的例子 x = ['a'] = ["a"] x.to_s = "["a"]" 然后再来 "["s"]" 在处理http标头时发生了这种情况.我有一个标题,它将是一个数组,但http库正在对array.to_s值进行自己的字符转
一直在乱砍几个库,并遇到一个字符串被“双重逃脱”的问题.

例如:
固定的例子

> x = ['a']
 => ["a"] 
 > x.to_s
 => "["a"]" 
 >

然后再来

"["s"]"

在处理http标头时发生了这种情况.我有一个标题,它将是一个数组,但http库正在对array.to_s值进行自己的字符转义.

我发现的解决方法是将数组转换为字符串,然后“撤消”to_s.像这样:
formatted_value = value.to_s

if value.instance_of?(Array)
  formatted_value = formatted_value.gsub(//,"") #remove backslash                                                 
  formatted_value = formatted_value.gsub(/"/,"")  #remove single quote
  formatted_value = formatted_value.gsub(/[/,"") #remove [                                                                                                     
  formatted_value = formatted_value.gsub(/]/,"") #remove ]   
end
value = formatted_value

……有一个更好的方法……(不需要修补我正在使用的宝石). (是的,如果我的字符串实际上包含那些字符串,那么这个休息.)

建议?

**更新2 **

好的.在这个街区仍然有麻烦,但现在我想我已经找到了核心问题.在to_s调用之后,它将我的数组序列化为json.至少,这似乎正在复制我所看到的.

[ ‘A’].to_s.to_json

我正在调用一个返回to_s结果的gem中的方法,然后我在它上面调用to_json.

解决方法

由于您编辑过的问题,我已经编辑了我的答案:

我仍然无法复制你的结果!

>> x = ['a']
=> ["a"]
>> x.to_s
=> "a"

但是当我改变对此的最后一次调用时:

>> x.inspect
=> "["a"]"

所以我会假设你正在做的事情是什么?

这不一定是逃避价值 – 本身.它存储的字符串如下:

%{["a"]}

更确切地说:

'["a"]'

在任何情况下.这应该可以解除它的串行化:

>> x = ['a']
=> ["a"]
>> y = x.inspect
=> "["a"]"
>> z = Array.class_eval(y)
=> ["a"]
>> x == z
=> true

我对使用class_eval的安全性持怀疑态度,对用户输入持谨慎态度,因为它可能产生无意的副作用(并且我指的是代码注入攻击),除非你非常确定你知道原始数据在哪里来自,或允许通过它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读