電子書籍の厳選無料作品が豊富!

大変困っておりますので、お分かりになる方どうぞ宜しくお願い致します。

環境は以下の通りです。
OS:Linux
Webサーバ:Apache2
言語:PHP4

PHPのプログラム内で、アンカーを生成し、

<a class='file' href="#" onClick="OpenFileWindow('./file/テスト.ppt');"> テスト.ppt</a>

javascriptのwindow.openで、ファイルを開こうと試していますが、ファイル名が日本語の場合、開くことができません。

実行すると、「ページが見つかりません」と表示されてしまうのです。
試しにそのファイルを英数字の名前へ変更し、実行するとちゃんと開く事ができます。

何が悪いのかさっぱり分からず、困っております。
どうぞ宜しくお願い致します。

A 回答 (4件)

No 3の人の回答でほぼ大丈夫だと思いますが、実際にどんなエンコードで保存されているか確認する必要が有ります。


Apacheなら、index.htmlのないフォルダにファイルをコピーしてブラウザからアクセスし、表示エンコードを確認すれば簡単に確認出来ると思います。文字化けしていた場合にはブラウザのエンコードを変えてみて、きちんと表示されるエンコードが保存されているファイル名のエンコードです。

なお、Win環境の場合、ファイルをダウンロードするときもSJISが標準になっているので、ダウンロード時ではなく、ファイルを保存(アップロード等)するときにファイル名をSJISにしておくと間違いが少ないと思います。保存したファイル名のエンコードをSJISとしておけば文字化けせずにすんなりとダウンロード出来ると思います。例えばスクリプト内の内部エンコーディングをEUC-JPとした場合は、
$file = urlencode(mb_convert_encoding($filename,"SJIS","EUC-JP"));
で良いと思います。
    • good
    • 0
この回答へのお礼

ご返答が遅くなってしまい、申し訳ありませんでしたm(__)m

>$file = urlencode(mb_convert_encoding($filename,"SJIS","EUC-JP"));
で良いと思います。

ご丁寧な回答、本当にありがとうございます。
とても参考になりました。
この方法で明日試してみたいと思います。

お礼日時:2006/06/01 23:27

日本語ですと文字コードが違うと全く違うファイル名になるので当然ですね


Linux上のファイル名の文字コードに変換すればいいはずです。
Shift JISからutf-8に変える場合なら
<?php
$file = './file/テスト.ppt';
$file = mb_convert_encoding($file, "utf-8", "sjis");
$file = urlencode($file);
?>
<a class='file' href="#" onClick="OpenFileWindow('<?php echo $file ?>');"> テスト.ppt</a>
    • good
    • 0
この回答へのお礼

ご返答が遅くなってしまい、申し訳ありませんでしたm(__)m

ごてもご丁寧なご回答を頂き、感謝しております。

この方法で試してみた所、ファイルは開く事ができたのですが、ダウンロード時に表示されるwindowsメッセージ画面の中のファイル名が化けでしまいます。。。
もうこれは仕方ないのでしょうか?

お礼日時:2006/06/01 23:23

>何が悪いのかさっぱり分からず



日本語で名前をつけることが悪いのです。
文字コードを合わせれば開ける可能性はありますが
一般的には日本語のようにコードによりぶれのある
2バイト文字でファイル名をつけると、
痛い目にあうため、ファイル名には使用しません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

できれば私も日本語でのファイル名はやめたいのですが、仕様の為ファイル名を変えることはできないのです。

お礼日時:2006/05/30 08:51

このへんとか


http://cutie.dip.jp/pc/linux/php-mb/
このへんでどうでしょう?
http://www.syon.co.jp/syontech/tech003.html
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
参考にさせて頂きます。

お礼日時:2006/05/30 08:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!