3

nginxが間違ったエンコーディングで静的画像を読み込もうとしている理由を理解しようとしています。例えば:

error.logから:

2012/08/08 21:14:46 [エラー] 17968#0: *71 open() "/home/www/mydomain.com/WEB-INF/images/productimage/image-ø.png" 失敗 (2 : そのようなファイルやディレクトリはありません)、クライアント: xxxx、サーバー: www.mydomain.com、リクエスト: "GET /images/productimage/image-%C3%B8.png HTTP/1.1"、ホスト: "www.mydomain.com "、リファラー: "http://www.mydomain.com/"

私のnginx.confファイルに次を追加しました。

source_charset utf-8;
charset utf-8;

しかし、残念ながらそれでは解決しませんでした。

私の vhost 設定ファイルは、以下を使用してイメージ ファイルを提供します。

    location /images/
    {
            alias /home/www/mydomain.com/WEB-INF/images/;
            expires 15d;
    }

LANG環境変数がそのように設定されたubuntuを使用しています。

export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

どんな手掛かり ?ありがとう !

4

1 に答える 1

1

URI のパーセント エンコーディングは、実際には 1 段階ではなく 2 段階のエンコーディングです。理想的には、最初のテキストは UTF-8 としてエンコードされ、UTF-8 テキストは「パーセントでエンコード」されて URI で使用され、次のような結果が生成されます。

/images/productimage/image-%C3%B8.png

この URI が正しくエンコードされていることを確認できますか? 必要な文字で開始し、UTF-8 としてエンコードしてからパーセント エンコードすると、結果は %C3%B8 になりますか? 次のように、パーセントでエンコードされたスクリプトを手動で生成できます。

 $perl -MCGI -e 'print CGI::escape("Hello World")."\n";'
 Hello%20World

別の言い方をすると、エンコーディングではなく、Nginx によるデコードに問題があると確信していますか? 画像参照を含む HTML ページのエンコーディングを確認してください。HTTP ヘッダーとメタ タグの両方を確認します。それ自体が UTF-8 として明示的に宣言されていることを確認してください。そうしないと、ブラウザーが参照を誤って解釈する原因となる可能性があります。

同様に、次のようにデコード プロセスを手動でテストすることもできます。

 perl -MCGI -e 'print CGI::unescape("/images/productimage/image-%C3%B8.png")."\n";'
 /images/productimage/image-ø.png

Perl を使用したパーセント エンコーディングに関する詳細な記事を書いたので、参考にしてください。

于 2012-08-08T19:46:02.427 に答える