• ベストアンサー

日本語のファイルが開けない

大変困っておりますので、お分かりになる方どうぞ宜しくお願い致します。 環境は以下の通りです。 OS:Linux Webサーバ:Apache2 言語:PHP4 PHPのプログラム内で、アンカーを生成し、 <a class='file' href="#" onClick="OpenFileWindow('./file/テスト.ppt');"> テスト.ppt</a> javascriptのwindow.openで、ファイルを開こうと試していますが、ファイル名が日本語の場合、開くことができません。 実行すると、「ページが見つかりません」と表示されてしまうのです。 試しにそのファイルを英数字の名前へ変更し、実行するとちゃんと開く事ができます。 何が悪いのかさっぱり分からず、困っております。 どうぞ宜しくお願い致します。

  • PHP
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No 3の人の回答でほぼ大丈夫だと思いますが、実際にどんなエンコードで保存されているか確認する必要が有ります。 Apacheなら、index.htmlのないフォルダにファイルをコピーしてブラウザからアクセスし、表示エンコードを確認すれば簡単に確認出来ると思います。文字化けしていた場合にはブラウザのエンコードを変えてみて、きちんと表示されるエンコードが保存されているファイル名のエンコードです。 なお、Win環境の場合、ファイルをダウンロードするときもSJISが標準になっているので、ダウンロード時ではなく、ファイルを保存(アップロード等)するときにファイル名をSJISにしておくと間違いが少ないと思います。保存したファイル名のエンコードをSJISとしておけば文字化けせずにすんなりとダウンロード出来ると思います。例えばスクリプト内の内部エンコーディングをEUC-JPとした場合は、 $file = urlencode(mb_convert_encoding($filename,"SJIS","EUC-JP")); で良いと思います。

shelly11
質問者

お礼

ご返答が遅くなってしまい、申し訳ありませんでしたm(__)m >$file = urlencode(mb_convert_encoding($filename,"SJIS","EUC-JP")); で良いと思います。 ご丁寧な回答、本当にありがとうございます。 とても参考になりました。 この方法で明日試してみたいと思います。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

日本語ですと文字コードが違うと全く違うファイル名になるので当然ですね 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>

shelly11
質問者

お礼

ご返答が遅くなってしまい、申し訳ありませんでしたm(__)m ごてもご丁寧なご回答を頂き、感謝しております。 この方法で試してみた所、ファイルは開く事ができたのですが、ダウンロード時に表示されるwindowsメッセージ画面の中のファイル名が化けでしまいます。。。 もうこれは仕方ないのでしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>何が悪いのかさっぱり分からず 日本語で名前をつけることが悪いのです。 文字コードを合わせれば開ける可能性はありますが 一般的には日本語のようにコードによりぶれのある 2バイト文字でファイル名をつけると、 痛い目にあうため、ファイル名には使用しません。

shelly11
質問者

お礼

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

  • suzukikun
  • ベストアンサー率28% (372/1325)
回答No.1

このへんとか http://cutie.dip.jp/pc/linux/php-mb/ このへんでどうでしょう? http://www.syon.co.jp/syontech/tech003.html

shelly11
質問者

お礼

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

関連するQ&A

  • JavaScript のリンクから、CGIを動かす方法

    アンカーをクリックして、画面を遷移させずにウインドウを開き、 cgi を動かすにはどうしたらいいでしょうか? 現在、 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ <A HREF="www.htm" onClick="return openWin('http:://test/test.htm')">[開く]</A>   ・   ・   ・ var w = window; function openWin(url) {  w = open(url, "_blank");  return(false); } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ と書き、[開く] アンカーをクリックすれば、別窓が開きますが、 この時同時に test.cgi を動作させたいのです。(test.cgi に遷移させない) よろしくおねがいたします。

    • ベストアンサー
    • Perl
  • ファイル書き込みでの改行

    <?php $file = fopen('test.txt','a'); fwrite($file,'test\r\n'); ?> test\r\ntest\r\n 実行するとこのような結果になるのですが、 test test のように書き込むことは可能でしょうか? 環境は XAMPP 1.6.4 です。

    • ベストアンサー
    • PHP
  • NNでは動くのにIEで動かない。

    NN4.75、IE5.00という環境で、JavaScriptを使ったHPを作成しています。そのJavaScriptも先日こちらのサイトで教えて頂いたもので(http://www.okweb.ne.jp/kotaeru.php3?qid=135419)、正しく動くと書いてあったのですが、IEでは動きません。 <HTML> <HEAD><TITLE>フレームなしページ</TITLE> <SCRIPT language="JavaScript"> <!-- sendURL = "b.html"; function sendData(anc){ sData = escape(anc); location.href = sendURL + "?" + sData ; } //--> </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000"> <P><A href="#" onClick="sendData('#1')">アンカー1</A></P> <P><A href="#" onClick="sendData('#2')">アンカー2</A></P> </BODY> </HTML> フレームのないページから、フレームのあるページのそれぞれ特定の場所(#1,#2)にリンクさせるというもので、フレームのないページから抜け出せません。 アドレスの所には、"file:///U:/a.html#"とでます。 これはNNでは、"file:///U:/a.html#"→"file:///U|/b.html?%232"とでてきちんとリンクするのでどこか、プログラムが違ってしまっているのかと、何回も見てみたのですが、わかりません。 教えてください。

  • PHPとJavaScriptで...

    PHPで以下のようなリンクを生成し、 <form name="hoge" method="post"> <input type="hidden" name="hogehoge"> </form> <a href="javascript:void(0)" onClick="submit('0')">あ</a> <a href="javascript:void(0)" onClick="submit('1')">い</a> <a href="javascript:void(0)" onClick="submit('2')">う</a> <a href="javascript:void(0)" onClick="submit('3')">え</a> <a href="javascript:void(0)" onClick="submit('4')">お</a> POSTで受け取ったデータを再びPHPで使用したいのですが、 (同一ページ内で) 色々調べてみたのですが、いまいちわかりません。 JavaScriptの部分をどのようにしたらよいか、また根本的に間違っていたらどのように変えればよいか、 教えてください。 m(_ _)m

    • ベストアンサー
    • PHP
  • 親ウィンドウの別フレームを子ウィンドウから操作したい

    いろいろ試しているのですが、理解不足のせいでしょうが、どうやってもできません! 内容は以下の通り(分からないのは3)です。どうぞ宜しくお願いいたします。 1:画面を、AとBの2つのフレームに分割しています。 【index.html】 <frameset>  <frame src="A.html" name="A">  <frame src="B.html" name="B"> </frameset> 2:Aフレーム内に記述してあるaaaアンカーをクリックすると、子画面ko.htmlを開きます。 <a href="javascript:void(0)" onclick="window.open('path=ko.html','_blank');">子画面</a> 3:ko.htmlではbbbというアンカーがあって、それをクリックすると、"親画面のBフレームにbbbで指定したリンク内容を表示したい"のです。 <a href="javascript:void(0)" onclick="opener.window.location=('B?path=/home/~/~/ZZZ.html');">開きたいファイルZZZ.html</a> と書くと、openerはAだからAにZZZ.htmlの内容が表示されてしまうので、(全くおかしな記述をしているのかもしれませんが・・・(- -;))あちこち調べながら、 B.opener.window.locationとか、 B.opener.window.location.hrefとか、 parent.B.window.locationとか、 parent.frames[1].window.locationとか、 ほかにもいろいろやってみたのですが、出来ませんでした・・・。 このような別フレームの操作が出来る方法があれば教えてください。 宜しくお願いいたします。

  • 同じファイル内で、アップロードとアップロードされたファイルの処理をすることについて

    OS:Window XP Pro 開発環境:Xampp(Apache + PHP + Mysql) 現在ファイルをアップロードする処理を書いているのですが、 この処理を 1)a.phpでファイルをアップロードする処理 2)b.phpでアップロードされたファイルの処理 と分けて、コーディングするのではなく 1)a.php内にファイルをアップロードする処理とアップロードされたファイルの処理を一緒に記述する という風にできないかと思いましたので、 以下のようなコードを書いたのですが $_FILES['upload_file']['tmp_name']) の値を調べてみたところ、なんの値も 入っていなかったことから このコードでは、二つの処理を一つのファイル内に書くことが でいないようでした。 どうにかしてひとつのファイル内に この二つの処理を同居させることはできないのでしょうか? a.php --------------------------------------- switch($action) { case "update": if(is_uploaded_file($_FILES['upload_file']['tmp_name'])) { $upload_file = $_FILES['upload_file']['tmp_name']); if(file_exists(dirname(__FILE__)."/profile_phote/") == TRUE) { $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } else { mkdir(dirname(__FILE__)."/profile_phote/"); $phote_name = dirname(__FILE__)."/profile_phote/".$upload_file; } move_uploaded_file($_FILES['upload_file']['tmp_name'],$phote_name); "リダイレクト処理・・・" case ... case ... default: <form name="profile" action="" method="post"> <input type="file" name="upfile"> <input type="hidden" name="action" value="update"> </form> }

    • ベストアンサー
    • PHP
  • ローカルファイル(mp3)の再生

    かなり久々にWebページを作っているのですが これをクリアできないと、サイト自体が運営できないことになって困ってます。 簡単に申しますと、ローカルファイルに対するリンクです。 例)  <A HREF="file:///c:/test.mp3">テスト</a>  <FORM><INPUT TYPE=BUTTUN onClick='location.href="file:///c:/test.mp3"' value="テスト"></FORM> 上記のようなタグを含むHTMLをローカルファイルで開くと、リンクが正常に動作するのですが サーバー上に乗せると、どうやっても動きません。 #厳密には動いたのですが、IE3でした・・・ 前提条件は下記のとおりです。  ローカルファイルが閲覧者のHDDのなかにあること。なければエラーでOK  CGI、JavaScriptを使用するのはOK  フラッシュ、VBscript、ActiveXを使用するのはNG  OSに関連付けしてあるメディアプレイヤーが起動すること。  (WindowsMedia9であればそれが、QuickTimeであればそれが立ち上がること)  OSはWindows限定で構いません。 本当に急いでいます。お願いします ぺこりっ

    • ベストアンサー
    • HTML
  • Getリクエストによりダウンロードファイルを変える

    お世話になります。aizawa_naoと申します。 --------------------------------------- 環境、php5.2.0-8 apache2.2.4 debian --------------------------------------- 上記の環境で、簡単なphpスクリプトを作成しようと思っています。 ほとんど、phpの知識はないのですが、phpでgetリクエストを受け取り、 それをブラウザに出力することは出来ます。 これをサイトなどで、よく見るGetのパラメータにより、ダウンロードする ファイルを変化させたいのですが、どのような記述になるのでしょうか? 例)http://example.com/test.php?file=test.zip このようなリクエストがくると、test.zipをダウンロードし、   http://example.com/test.php?file=test2.zip とするとtest2.zipがダウンロードされるような仕組みをご教示いただければと思います。 初歩的な質問で申し訳ありませんが、宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • onclickで別ドメインのphpを実行

    テキストリンクをクリックした時に別ドメインのphpファイルを実行する方法を教えてください。 あるテキストリンクをクリックしたら、そのリンク先に移動するとともに、とあるサーバーにあるphpファイルを実行させたいです。 <a href="http://www.***.com/" onclick="http://www.abc.jp/efg.php">テキストリンク</a> 上記のようにしましたが、phpが実行されませんでした。ネット上でJavascript(ajax)を使った方法などが紹介されていたので試しましたが、やはりphpが実行されませんでした。 具体的なソースを記述した、ご教授を宜しくお願い致します。

  • 【JavaScript】iFrame内submit

    JavaScriptで、iFrame内のFormをsubmitする方法を教えてください。 条件: iFrameに読み込むページは千差万別で、FormにIDもNameも設定されていない状況(ただし、必ずFromは1つ)で、そのiFrame内のフォームをsubmitする方法。 Form名がわからないですから、getElementsByTagName("form")[0]で呼び出すしかなさそうなんですが、 (iFrameの名前を"ifl"とします)iFrameの外に置いた空アンカーで <a href="#" onclick="parent.ifl.getElementsByTagName(\"form\")[0].submit()">iFrame内をsubmit</a> としても <a href="#" onclick="document.ifl.getElementsByTagName(\"form\")[0].submit()">iFrame内をsubmit</a> としてもうまく動きません(;´Д`) どういうエラーが出てるのか知りたかったので、onclick内部を外出しして、try-catchでくくり function pushSubmit() { try { eval("parent.ifl.getElementsByTagName(\"form\")[0].submit()"); } catch(e) { alert(e); } } としてから、pushSubmit()を空アンカーで実行すると、エラーは「Error: Permission denied for <file://> to get property Window.getElementsByTagName」と返ってきます。 もう、どうにも突き当たってしまいました・・・ どなたか光明を差して下さい・・・orz