ruby-on-rails – Ruby(Rails)unescape一个字符串 – 撤消Array.
一直在乱砍几个库,并遇到一个字符串被“双重逃脱”的问题.
例如: > x = ['a'] => ["a"] > x.to_s => "["a"]" > 然后再来 "["s"]" 在处理http标头时发生了这种情况.我有一个标题,它将是一个数组,但http库正在对array.to_s值进行自己的字符转义. 我发现的解决方法是将数组转换为字符串,然后“撤消”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的安全性持怀疑态度,对用户输入持谨慎态度,因为它可能产生无意的副作用(并且我指的是代码注入攻击),除非你非常确定你知道原始数据在哪里来自,或允许通过它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |