人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

テキストファイルの中身(UTF-8 or SJIS or EUC)の先頭の80文字をファイル名にして保存するプログラムをPHP5.2で作ろうとしています。
1) urlencodeみたいな感じでテキストからファイル名が許容できる形式に変更する関数を教えてください
2) 生成されたテキストファイルは、WindowsXP,Ubuntu,MacOSで見る可能性があるのですが、ファイル名のエンコードはどれが最適でしょうか?

●質問者: kunitz
●カテゴリ:コンピュータ インターネット
✍キーワード:EUC MacOS SJIS Ubuntu UTF-8
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● espresso3389
●35ポイント

まず、urlencodeの様な都合の良い関数はどこにもないと思います。理由としては、基本的に、UNIX系のプラットフォームでは、ファイル名に関して、あまり、厳格な決まりがなく、/ \0が使えないといった程度の決まりしかないからです。

とはいえ、最近のLinuxならば、文字コードは、概ね、UTF-8に統一されつつあり、お手元のUbuntuもUTF-8であると思われます。逆にこの前提が崩れると、たとえば、EUC-JPの場合には、最初に文字コードをその範囲に絞り込む処理(簡単に言えば、日本語以外を除去)が必要になるでしょう。

一方で、Windows XP、Mac OS Xに関しては、確実にファイル名の文字コードがUTF-16/UTF-8になっているので、いわゆるUnicodeの範疇の文字が使えます。Windowsでは、

\ / : * ? " < > |

がファイル名で利用できません。また、Mac OS Xでは、基本的には、UNIXに準じるので、/ だけが使えない文字なのですが、Finderのからみで、

:

が使えず、また、ファイル名が . から始まるファイルが事実上見えなくなるので、これも使わない方が良いでしょう。

上記内容を簡単にまとめると、

となります。そのため、これらの文字のみを%XXの様な感じでエスケープするか、あるいは、単純に削除するのが良いと考えられます。

また、ファイルのエンコードについては、最近は、どのOSでもUTF-8のファイルであれば、普通に開くことが出来ます。ただし、文字コードの自動判別は難しいことがあるので、BOM付きのUTF-8がお勧めです。

結局、ご質問の内容に対する正確な返答にはなっていないと思いますが、ご参考程度にはなると思います。

http://example.com (ダミーです)


2 ● b-wind
●35ポイント

ファイル名が許容できる形式に変更する関数

そんな物はない。

先の回答者も述べているように、OSやファイルシステムによって制限は様々だから

そのOSごとの対応ならともかく、共通で使えるような専用関数は無い。


生成されたテキストファイルは、WindowsXP,Ubuntu,MacOSで見る可能性がある

それぞれバージョンとファイルシステムぐらいは書かないと何とも言えません。


上記を踏まえた上で無難そうなのは、Base64 で変換し、変換後の文字列のうち、「/」を「-」に変換した物です。

Base64 - Wikipedia

これで有ればすべての文字は US-ASCII の範囲内で収まりますのでエンコーディングはほぼ関係ないですし、

OSごとの特殊文字もほとんど引っかかることはないでしょう。


ただし、今度はファイル名の文字列長制限に引っかかる恐れがありますが、80文字程度ならぎりぎり何とかなるでしょう。

(UTF-8 で日本語のみ80文字だとかなり厳しいですが)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ