• 締切済み

php初心者です。宜しくお願い致します。

php初心者です。宜しくお願い致します。 動作環境はwindowsXPです。 windows上に配置された日本語のファイル名を持つファイルをphpから処理したいと思っています。 たとえば、 if (!file_exists(mb_convert_encoding($path_file,"SJIS","auto"))) {・・・というようにまずファイル存在チェックを行うなど。 上記例では$path_fileはUTF-8で格納しているため、windowsに合わせSJISにエンコーディングしています。 $path_fileにはフルパスを指定し、大抵の日本語ファイルは読み込めるのですが、いわゆる5C問題に該当する、「表紙.pdf」「予定.txt」など、特定文字を含む日本語ファイル名が読めません。上記file_existsを行うと、存在するのに「存在しない」と判定されてしまいます。 不思議なのは、scandirして指定フォルダ内全てのファイル名を一括取得し配列へSJISで格納した後、そのまま配列の値をもってfile_existsしてみると、上記特定文字を含む日本語ファイル名だけ「存在しない」と判定されてしまいます。 ちなみにscandirした結果をUTF8に変換しブラウザに表示させてみると「表紙.pdf」「予定.txt」と正しく表示され、「表\紙.pdf」「侮・.pdf」等のように化けないです。 php.iniの「magic_quotes_gpc」はOffとなっています。 file_existsだけでなく、fopen、readfileなど含め、正しく処理できるようにするためにはどうすればよいのでしょうか、ご教授いただけると幸いです。

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

SJISで取り込んだ物に対して 5C開始文字に\をくっつける処理をしてみたらどうかな。 置換でいけると思うけど・・・

noa12345
質問者

お礼

早速のご回答ありがとうございます。 やり方はいろいろあると思いますが、たとえば $path_file = mb_ereg_replace('表','\表',$path_file); のように変換してみましたが、やはりうまくいきませんでした。 '表\'のように後ろにもつけてみましたがだめでした・・・。

関連するQ&A