5

私が書く場合:

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

その後、問題なく動作しています。

しかし、それを次のように変更すると:

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

それは報告します

"そのようなファイル、又はディレクトリはありません..."。

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

4

4 に答える 4

0

setlocale(LC_ALL, array("es_ES.utf-8","es_ES@euro",'es_ES'));ロケールが正しく設定されていることを確認するために、または国コードを実行してみましたか?

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

于 2010-01-09T11:17:54.297 に答える
0

ファイル システムは必ずしも UTF-8 を使用するとは限りません。たとえば、これはウィキペディアがNTFSについて述べていることです。

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

文字セットを変換するには、iconv()を使用する必要がある場合があります。

于 2009-11-19T09:20:28.750 に答える
0

このサンプルが役立つはずです。言語コード ページを見つけて、それに置き換える必要があります。私は次のコードをテストし、アラビア語/ペルシャ語の名前の Windows で動作します。

$newname = iconv("utf-8", "cp1256","گچپژ");
echo rename("1.txt", $newname);
于 2015-04-19T13:16:49.607 に答える
-1

mbstring がこの特定の問題とは何の関係もないことはほぼ確実です。ここでの問題は、.php ファイルのエンコーディングに依存していると思います。

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

于 2009-05-18T02:16:05.087 に答える