3

nginxログを解析していますが、HTTP_REFERER文字列(たとえば、Webサイトの検索に使用されるクエリ文字列)からいくつかの詳細を検出したいと思います。1人のユーザーが「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は16進文字列をパックしています。

文字列を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 に答える