ファロ名のファイルを取得して、PHPスクリプトに保存しようとしています。
2010_08_Útflutningur.xls
Ubuntu 10.04では、LTSは次のように保存しています:
2010_08_�tflutningur.xls (invalid encoding)
utf8-migration-tool
をインストールして実行しましたが、効果はありません。
これはUbuntuのエラーですか?修正できますか、それともPHPの名前を放棄して変更する必要がありますか?
Ubuntuのファイル名に受け入れられる文字セットは何か、またはエンコーディング仕様は何ですかを記載したドキュメントはありますか?
ありがとう
これはエンコードの問題のようです。残念ながら、PHPはデフォルトではシングルバイト文字列であるため、エンコーディングに関しては少し手で保持する必要があります。 PHP内でファイル名を作成する場合、 utf8_encode()
が役立つはずです。ただし、入力にはISO-8859-1エンコードを想定していることに注意してください。
一方、クライアントから送信されたファイル名を使用している場合は、おそらくクライアントにエンコードを依頼することができます。これは、accept-charset
タグの <form>
属性を使用して、および/またはフォームが存在するページの文字セットを設定することによって行われます。特定のクライアントはどちらか一方を使用する場合があるため、最良の結果を得るには、それぞれにUTF-8を使用します。
デフォルトでは、Ubuntuはファイル名にUTF-8を使用します。最近のほとんどのLinuxディストリビューションおよび他の多くのオペレーティングシステムは、これを行います(Windows/NTFSは、UTF-16で最もよく知られている例外です)。
表示されているような間違ったエンコーディングの名前を持つファイルを修正するには、nautilus-filename-repairer
を使用してみてください。
Sudo apt-get install nautilus-filename-repairer
PHP iconv
関数を使用して、文字列(ファイル名)をあるエンコーディングから別のエンコーディングに変換できます。もちろん、そのためには、最初にどのエンコーディングを使用しているかを知っている必要があります。
クライアントから正しくエンコードされたファイル名を取得するには、eswaldで説明されている手法を試すことができます。