3

私は、ユーザーがドキュメント (pdf、word) などをアップロードするシステムを持っています。問題は、外国のユーザーがアラビア語、中国語、日本語のファイル名をアップロードしていて、それらを処理できるシステムがそれらをデータベースに追加していることです。

問題が発生するのは、php を使用してファイルをダウンロードしようとする場合です。

$result = mysql_query($query) or die('Error, query failed');

list($filename, $type, $filesize, $filepath) = mysql_fetch_array($result);

header("Content-Disposition: attachment; filename=$filename");

header("Content-length: $filesize");

header("Content-type: $type");

readfile($filepath);

システムがファイル名を認識していないため、ファイルをダウンロードできません。助言がありますか?

4

3 に答える 3

3

アップロードされたファイルごとに一意の ID を生成し、その ID を使用してファイルの名前を変更し、ID、元のファイル名、および拡張子をデータベース テーブルに保存することで、この問題を回避しました。次に、テーブルで目的の ID を簡単に検索し、元のファイル名 (人間が判読できるように表示することができます) と拡張子を取得して、{id}.{extension} ファイルをダウンロードできます。

これには、2 つのファイルがまったく同じ名前でアップロードされた場合、後者のアップロードによって元のファイルが上書きされないという利点もあります。

于 2009-07-09T15:31:23.167 に答える
1

ファイル名を MySQL に保存する必要がある場合は、utf8_unicode_ci. 接続後に行うことを忘れないでくださいmysql_query("SET NAMES utf8");。Unicode 文字列を適切に保存および取得するには、これで十分です。

Content-Dispositionヘッダーと非 ASCII ファイル名については、「HTTP で Content-Disposition ヘッダーのファイル名パラメーターをエンコードする方法は?」という適切な回答が既にあります

于 2009-07-08T18:23:20.107 に答える
1

(例: 我是神.doc ) のような Unicode 名を php 5 および Linux にアップロードするのは複雑です。さまざまな OS がそのようなファイル名をサポートしていないと思われます。

別の方法として、{file-id}.doc などのカスタム名でファイルをアップロードし、その情報 (元のファイル名など) をデータベース テーブルに保存します。ダウンロード ページでは、情報を含むテーブルに保存された情報でヘッダーを変更できます。そのファイルの

于 2009-07-08T10:17:23.323 に答える