2009-07-08 20 views
3

私は、ユーザーが文書(pdf、word)をアップロードするシステムを持っています。問題は外国人のユーザーがアラビア語、中国語、それらを扱うことができ、それらをデータベースに追加しています。PHPファイルアップロード - アラビア語/中国語/日本語ファイル名の扱い

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); 

システムは、このようにファイルをダウンロードしません、ファイル名を認識していません。助言がありますか?

+0

問題のあるファイル名のいくつかを印刷できますか?また、ファイルパスを保存するために使用される列の説明も良いでしょう。 Hunchは正しいエンコードで挿入されなかったことです。 – wai

答えて

1

私は様々なOSは、このようなファイル名をサポートしていないあなたのために

1つの選択肢はいくつかのカスタムでそれらをアップロードすることである疑いがある、PHP 5とLinux件まで(例えば我是神の.doc)などのUnicodeの名前をアップロードするために複雑です名前は{file-id} .docで、元のファイル名のような情報をデータベーステーブルに保存することができます。ダウンロードページでは、そのファイルに関する情報を含むテーブルに格納された情報でヘッダを変更できます。

1

MySQLにファイル名を格納して、utf8_unicode_ciのようなテーブルとカラムの照合が適切であることを確認してください。接続後にmysql_query("SET NAMES utf8");を実行することを忘れないでください。これは、Unicode文字列を適切に格納して取得するのに十分でなければなりません。

Content-Dispositionヘッダと非ASCIIファイル名のように、この上の良い答えがすでにあります:「How to encode the filename parameter of Content-Disposition header in HTTP?

3

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

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

+0

同じ原理を使って、魅力的な作品です:) – usoban

関連する問題