3

我正在解析我的 nginx 日志,并且我想从 HTTP_REFERER 字符串中发现一些详细信息,例如,用于查找网站的查询字符串。一位用户输入了“México”,在日志中被编码为“query=M%E9xico”。

通过这个Rack::Utils.parse_query('query=M%E9xico')你得到一个哈希,{"query" => "M?xico"}

当您将“M?exico”塞入 Postgres(但不是更宽容的 SQLite)时,它会呕吐,因为字符串不是正确的 UTF-8。查看http://rack.rubyforge.org/doc/Rack/Utils.html#M000324,unescape 正在打包一个十六进制字符串。

如何将字符串转换回 UTF-8,或者我可以让 parse_query 首先返回 UTF-8。

4

2 回答 2

1

unescape 将解码 URL 编码:

Rack::Utils.parse_query(URI.unescape('query=M%E9xico'))

或者

Rack::Utils.parse_query(Utils.unescape('query=M%E9xico'))
于 2013-03-13T12:56:32.800 回答
0

这里的问题发生在你掌握数据之前。如果可以,您需要在上游解决问题,如果不能,那么我的建议是找出编码并将其转换为输入或使用 Ruby 中的转换库(例如 iconv)。

不过,问题不在 PostgreSQL 中。

于 2013-03-13T12:42:54.187 回答