現在、ユーザーは好きなようにファイルをアップロードできます。したがって、アップロードされたファイルには、空白文字、ß, ü
などの文字があります。他のユーザーよりもこれらのファイルをダウンロードすることができます(URLの空白を含むなど)。このように動作しますが、RFC1738 - Uniform Resource Locators (URL)に従うと、英数字の[a-zA-Z0-9]
といくつかの特殊/予約文字のみが許可されます。また空のスペースは避けてください。ユーザーのアップロード/ダウンロードのファイル名に許可される文字
現在、私は、サーバー上のファイル名にß
ß
のために取得します。ファイルをダウンロードしたいユーザーは、MySQLデータベース(utf8_unicode_ci)で表される正しい文字(β)を取得し、そのファイルをサーバー上に見つけることができます。
- ファイル名を扱う正しい方法は何ですか?
- ファイル名を確認してアップロードを拒否する必要がありますか?
- ユーザーのアップロード後にサーバー上のファイルの名前を変更する必要がありますか(たとえば、
str_replace()
、urlencode()
、...)?
「ファイルシステムのエンコーディングとファイルシステムは、アップロードのファイル名に使用する文字セットと互換性があります」を調べるにはどうすればよいですか?はい、UTF-8を使用する必要があります。 WebサーバはApache、データベースサーバはMySQL 5.0.77、接続は 'SET NAMES utf8'で、ブラウザは誰でも、アップロードは' POST'と 'multipart/form-data'を介して行われ、HTMLのエンコーディングは' UTF-8 '。 Firebugでは、ファイルリンク提供のHTTP HTML応答は 'Content-Type \t application/x-www-form-urlencoded'ですが、何かをしたことがありません(デフォルト?)。 – testing
だから 'Content-Disposition'は私が望むものではありません。ファイル名はどのように正規化され、検証されますか? – testing
@testing:あなたは文字列処理でそれを自分で行います。 – hakre