已經在一些庫中進行了黑客攻擊,並且遇到了一個字符串被「雙重轉義」的問題。Ruby(Rails)使用字符串 - 撤消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。至少,這似乎正在重現我所看到的。
[「一」]。to_s.to_json
我打電話在返回一個to_s結果的寶石的方法,然後我打電話to_json就可以了。
你的例子用'x。to_s'導致您顯示的格式不是正常行爲。爲什麼要將字符串轉換爲數組?你在這裏覆蓋了一些你沒有告訴我們的東西嗎? – jdl 2011-03-08 16:52:04
我認爲你應該澄清你的問題和/或添加更多「雙逃避」的例子。如果要將它們放入雙引號字符串中,雙引號必須轉義。 – 2011-03-08 17:57:03
我同樣困惑。我在'irb'中做你的例子,並沒有得到你的結果(沒有真正期待)。爲什麼字符串會自動變成一個數組? – nzifnab 2011-03-08 18:26:03