- 締切済み
ファイル名がUTF-8のファイルをfopenしたい
サーバ上にファイル名がUTF-8の漢字コードで作られたファイルがあります。 これをEUCベースのphpからfopenできずに困ってます。 何かうまい方法はないものでしょうか? phpから英数字だけのファイル名にリネームする方法でも構いません。 ご存知の方、ご教示よろしくお願いします。 暫定的にcronでリネームするだけのshellを走らせてますが、スマートじゃなくて‥‥。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 1minn
- ベストアンサー率57% (52/90)
$baseEnc = mb_internal_encoding(); mb_internal_encoding('UTF-8'); // 実処理 fopen mb_internal_encoding($baseEnc); こんな感じでいけませんか?
- yambejp
- ベストアンサー率51% (3827/7415)
mb_convert_encoding()しても無理でしょうか? >暫定的にcronでリネームするだけのshellを走らせてます りネームができるのであればそのロジックをそのまま援用すれば 開けるような気がしますが・・・
お礼
回答ありがとうございました。 今回は断念して、ファイル名をUTF-8からasciiにリネームするだけの処理と、EUCで実際の処理をするのを分けることにしました。
補足
$file = "ファイル名.txt"; $txt = fopen (mb_convert_encoding ($file, "UTF-8", "EUC-JP") , "rb"); とかでしょうか? これだと failed to open stream: No such file or directory が返ってきます。 urlencode()で指定できないか試してみましたが、こっちもダメでした。 リネームはexec()やsystem()つかってみましたが、PHP内部コードがEUCなのでコマンドライン上でUTF-8のファイル名を指定できなくて‥‥。 サーバとphpの内部コードが違うと苦労します。 以前は両方ともEUCだったので苦労しなかったのですがー。
お礼
回答ありがとうございました。 結局、EUCで処理をするのが前提な部分と、UTF-8のファイル名をfopenするのを1本のphpで実行するのは無理と判断しました。 断念して、ファイル名をUTF-8からasciiにリネームするだけの処理と、EUCで実際の処理をするのを分けることにしました