2016-06-13 21 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') }