0

私のウェブサイトでは、ユーザーは任意の名前のファイルをアップロードできます。もちろん、一部の名前には非ASCII文字が含まれます。ユーザーがファイルをアップロードすると、元の名前のフォルダーに保存します。ただし、その場所(たとえばfiles/Tolstoy - How much land does a man need?.pdf)にアクセスしてダウンロードしようとすると、404が表示されます。これを解決して、ファイルが元の名前のままになるようにする方法はありますか?Apache経由で、多分?

4

3 に答える 3

1

ええと、パーセントエンコーディングとしても知られているurlエンコーディングを使用しますか?これは、WebでURLを処理するためのものです。HTMLに出力されるすべてのURLは、URLエンコードされている必要があります。

PHPの場合、rawurlencodeを使用する必要があります。これは、標準に準拠している必要があるためですが、urlencodeは準拠していません。

編集:この問題について

PHPは、「é」を「e%CC%81」ではなく「e%26%23769%3B」としてエンコードします。

e%CC%81のUTF-8になります。e%26%23769%3Bé、同じHTMLエンティティです。これは、urlencodingの前に明示的なhtmlentities()呼び出しを実行しているか、サーバーセットアップが自動的に実行していることを意味します。適切な文字セットが配置されている場合(実際にはhtmlspecialchars呼び出しのみが必要です)、厳密には必要ありませんが、何も壊してはなりません。

これらをテストしたい場合のいくつかのオンラインツール:

于 2013-02-07T21:38:29.790 に答える
0

回避策:アップロード時にファイル名をASCIIに変換します。あなたはそれに満足するでしょう。

于 2013-02-07T21:39:23.877 に答える
0

rawurlencode()なんらかの理由で、代わりに使用するとうまくいきurlencode()ました。

ただし、文字é(とりわけ、私は確信しています) はまだ奇妙にエンコードされています (e%26%23769%3B単に ではなく%C3%A9)。さらに奇妙なのは、それを含むリンクが機能することです。

于 2013-02-08T00:54:06.027 に答える