ファイル名のエンコードの問題


9

フェロー語の名前のファイルを取得して、それをPHPスクリプトに保存しようとしています。

2010_08_Útflutningur.xls

Ubuntu 10.04では、LTSは次の名前で保存しています。

2010_08_�tflutningur.xls (invalid encoding)

インストールして実行しましたutf8-migration-toolが、何の効果もありません。

これは私が修正できるUbuntuエラーですか、それともphpで名前をあきらめて変更する必要がありますか?

Ubuntuのファイル名に使用できる文字セットは何か、またはエンコードの仕様は何であるかを示すドキュメントはありますか?

ありがとう


PHPを介してファイルをどのように受信して保存しますか?(コードはどのように見えますか?)
Kees Cook

私はメールシステムからそれを解析していました。コードは複雑です:)
Elzo Valugi

ある同様のQ&A修理壊れたファイル名のスクリプトでは。
lumbric 2012年

回答:


5

これはエンコードの問題のようです。残念ながら、エンコーディングに関しては、PHPの文字列はデフォルトでシングルバイトであるため、PHPは少し手間がかかります。PHP内でファイル名を作成する場合は、utf8_encode()役立つはずです。ただし、入力にはISO-8859-1エンコーディングを想定していることに注意してください。

一方、クライアントから送信されたファイル名を使用している場合は、クライアントにエンコードを要求することができます。これはaccept-charset<form>タグの属性を使用して、またはフォームが配置されているページの文字セットを設定することによって行われます。特定のクライアントはどちらか一方を使用する場合があるため、最良の結果を得るには、それぞれにUTF-8を使用します。


7

デフォルトでは、Ubuntuはファイル名にUTF-8を使用します。最近のほとんどのLinuxディストリビューションや他の多くのオペレーティングシステムがそうしています(Windows / NTFSは、UTF-16で最もよく知られている例外です)。

あなたが示すような間違ったエンコーディングの名前を持つファイルを修正するには、 nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

PHP iconv関数を使用して、文字列(ファイル名)を1つのエンコーディングから別のエンコーディングに変換できます。もちろん、そのためには、最初にそれらのエンコーディングを知っている必要があります。

クライアントから正しくエンコードされたファイル名を取得するには、eswaldで説明されている手法を試すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.