2016-06-13 76 views
1

我試圖從PayPal的IPN保存參數,以便稍後可以訪問它們並用於交叉引用。的代碼,將其保存在paypal_logActionController上的強制編碼::參數

簡單一點:

@order.paypal_log = params.to_json

工作得很好,推到生產,仍然是工作的罰款。調查日誌另一個問題,我碰到下面一行來到:

Completed 500 Internal Server JSON::GeneratorError (source sequence is illegal/malformed utf-8):

它指向該生產線是上述params.to_json

環顧四周後,我發現force_encoding("ISO-8859-1").encode("UTF-8") (source)

我改變該行爲params.force_encoding("ISO-8859-1").encode("UTF-8").to_json並運行我的測試,出現以下錯誤:

undefined method `force_encoding' for #<ActionController::Parameters:0x000000073357f0>

這讓我擔心,由於某些原因,你不能解析整個params變量,只有一個散列。任何可能的解決方案強制所有參數的編碼?

回答

2

可以迭代每個參數並強制編碼。

params.each { |k, v| params[k] = v.force_encoding('ISO-8859-1').encode('UTF-8') }