ruby-on-rails - HTML 编码 UTF-8 字符串被破坏为 latin1

标签 ruby-on-rails postgresql rack

我正在解析我的 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。

最佳答案

unescape 将解码 URL 编码:

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

或者

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

关于ruby-on-rails - HTML 编码 UTF-8 字符串被破坏为 latin1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2557746/

相关文章:

ruby-on-rails-3.1 - Rack 中间件如何重定向到我的 Rails 应用程序中的 View

ruby-on-rails - Rack 或 rails 问题?

postgresql - GORM 不创建 ForeignKey 列

sql - 如何根据 ActiveRecord 中的条件在每第 n 个项目中插入?

ruby-on-rails - 基于键/值存储在 Formtastic 中创建动态表单

regex - Postgres 正则表达式问题

postgresql - 将数据从本地 .CSV 文件复制到远程服务器中的 pgsql 表

ruby - 在本地主机上使用 SSL 运行一个简单的 Rack 应用程序?

ruby-on-rails - 将 Rails 5.2 升级到 6.0 时出现错误数量的参数错误