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