2009-05-17 10 views
5

サポートしていない:名前変更は、マルチバイト文字を

rename('php109.tmp','test.jpg'); 

それは罰金と作業です。

が、私はにそれを変更した場合:

rename('php109.tmp','中文.jpg'); 

それは

報告します "そのようなファイルやディレクトリを..."。

しかし、マルチバイト文字をデータベースに書き込むことができる場合は、名前が変更されたときに、なぜそれが失敗し、読み出すことができますか?

+0

オペレーティングシステムまたはファイルシステムでマルチバイトのファイル名がサポートされていますか? – garrow

+0

はい、 ここに詳しい情報があります: ウェブページから投稿すると処理されます。 ページエンコーディングはutf8 です。エンコーディングはutf8です。 と私は文字列をダンプして、それもまたutf8であることを確認しました – omg

+0

あなたはどのOSを使用していますか?私はこれをFreeBSD 4.11、Debian 5.0、およびOS X 10.6.2でエラーなしでテストしました。 何らかの種類のシステムコールトレース機能を備えたOSを使用している場合は、有効にすることができますか? –

答えて

-1

mbstringはこの特定の問題とは関係がありません。ここでの問題は、.phpファイルのエンコーディングに依存していると思います。

コードエディタでファイルのエンコーディングをUTF-8(BOMなし)に変更してみてください。

+0

ですが、ファイルはすでにutf8でエンコードされています。 – omg

0

ファイルシステムは必ずしもUTF-8を使用するとは限りません。例えば、これはウィキペディアを約NTFSこう言われる、

NTFSは、名のエンコーディングのための16ビット 値(ファイル名、 ストリーム名、インデックス名など)の任意のシーケンスを可能にします。この は、UTF-16コードポイントがサポートされている意味 が、ファイルシステムには、シーケンスが有効なUTF-16(それは 短い値の任意のシーケンス、 がUnicode 標準のものに限定されないことができます)であるかどうか をチェックしません。

iconv()を使用すると、文字セット間の変換が必要になることがあります。

0

ロケールが正しく設定されていることを確認するために、setlocale(LC_ALL, array("es_ES.utf-8","[email protected]",'es_ES'));またはあなたの国コードが何であるかを試しましたか?

この呼び出しで 'utf-8'が返されない場合は、失敗したことを意味し、現在のロケールを返します。

0

このサンプルは、言語コードページを検索して置き換える必要があります。私はベローズコードをテストし、Windowsで動作するアラビア語/ペルシア語の名前:

$newname = iconv("utf-8", "cp1256","گچپژ"); 
echo rename("1.txt", $newname); 
関連する問題