• ベストアンサー

名前が日本語のファイルダウンロード方法

IEでページを表示して、そこのリンクをクリックするとダウンロードの画面が開きダウンロードするという方法で http://test.com/日本語.xls をクリックしたとき、ファイルはあるにもかかわらず、ファイルがないというエラーが出ます。 php側の文字コードは「utf8」です。 mb_convert_encoding($filename, "SJIS", "utf8") としてもダメでした。 この方法でダメな場合、他に方法はありますか?

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

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

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

リンクのURLにマルチバイト文字が含まれる場合はurlencode関数を使ってURLを適切な形にエンコードするのが一般的です。 http://www.php.net/manual/ja/function.urlencode.php 試してみてはどうでしょうか。

sublate
質問者

お礼

header("Content-Disposition: attachment; filename=$file"); で 解決しました。ありがとうございました。

sublate
質問者

補足

urlencode関数でダウンロードはできるようになりました。 しかし、ファイル名が文字化けしてしまっています。 こういう場合はどうすればいいのでしょうか?

その他の回答 (1)

  • wipe
  • ベストアンサー率52% (37/71)
回答No.1

失礼いたします。 私もmb_convert_encodingを使用しております。 この方法以外には思いつきません。 もしかすると文字コードの指定が反対ではありませんか?  現状:mb_convert_encoding($filename, "SJIS", "utf8")  変更:mb_convert_encoding($filename, "utf8", "SJIS") 半角英数ではエラーにはなりませんか? また日本語でもエラーにならない文字もありますか? ダウンロードのページにHTMLの文字コードの指定はありますか? 例.<META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> もしフォルダ内にファイルが1つしか存在しないのであれば、 readdir()にてファイル名を取得することが可能です。 変換した$filenameがどうなっているのか、printしてみてはどうでしょうか? 以上ですが参考になれば幸いです。

sublate
質問者

お礼

ありがとうございました。 urlencode関数の利用でダウンロードはできるようになりました。

関連するQ&A

  • CSVファイルをダウンロードで文字化け

    こんにちは。 CSVファイルのダウンロードで文字化けを起こしていて困っております。 どなたか助けてくださる方がいらっしゃると大変光栄です。 機種:WindowsXP English ファイル:UTF-8 PHPコードは下記の通りです。 いろいろとHeaderを付けてみたり変えてみたりしましたが、どれも結果は同じでした・・。 Header("Accept-Ranges: none"); Header("Content-Transfer-Encoding: binary"); Header("Content-type: application/x-csv; charset=SJIS-win"); Header("Content-Disposition: attachment; filename=1.csv"); $output = '2007/08/29 こんばんわ'; print mb_convert_encoding($output,'SJIS-win','UTF-8'); アウトプットは下記の通りです。ダブルバイト全てが文字化けしてしまいます。 2007/08/29 ‚ア‚ñ‚ホ‚ñ‚í どなたか解決方法をご存知ないでしょうか。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • php5.4でwin 日本語ファイル一覧表示

    こんにちは。 質問の仕方もうまくできずすみません。 現在、PHPを勉強しており、以下作業を行っているのですが うまくいかず、お知恵をお借りしたく質問させていただきました。 作業としてはwindows7ローカルにある「日本語フォルダ」「日本語ファイル」の 一覧をXAMPP PHP5.4を使って表示させたいのですがフォルダ名に「ソーダ」が含まれていると フォルダと下位ファイルが表示されません。 他質問等を見て文字コードの変換が必要とのことなのですが どのようにすればよいかわからないです。 再帰的にすべてのフォルダのファイルを表示するには どのようにすればよいでしょうか? よろしくお願いいたします。 <?php setlocale(LC_ALL, 'ja_JP.SJIS'); mb_convert_variables("SJIS-win","UTF-8", $it); mb_convert_encoding($it, 'UTF-8', 'CP932'); //内部処理用に文字コードをUTF-8とする $it = mb_convert_encoding($path,$it,"UTF-8","SJIS-win" ); //(.)(..)ファイルをスキップ $it = new RecursiveDirectoryIterator('./', FilesystemIterator::SKIP_DOTS); //パスとファイル名を取得 $it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST); foreach ($it as $item) { $path = $item->getPathname(); if ($item->isDir()) { $path .= '/'; } //文字コード変換 $result[] = mb_convert_encoding($path, "UTF-8","SJIS-win"); } echo nl2br(print_r($result, true));

    • 締切済み
    • PHP
  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • PHPExcelで日本語(漢字)ファイルが読めない

    ひらがな、カタカナは読み込めるのですが、漢字で下記のエラーが出ます。 mb_convert_encodingでいろいろ変換してみましたがダメです。 教えてください! Fatal error: Uncaught exception 'Exception' with message 'Could not open 予?xls for reading! File does not exist, or it is not readable.' in C:\xampp\htdocs\Partner_Management\PHPExcel\Shared\OLERead.php:76 Stack trace: #0 C:\xampp\htdocs\Partner_Management\PHPExcel\Reader\Excel5.php(928): PHPExcel_Shared_OLERead->read('??????xls') #1 C:\xampp\htdocs\Partner_Management\PHPExcel\Reader\Excel5.php(498): PHPExcel_Reader_Excel5->_loadOLE('??????xls') #2 C:\xampp\htdocs\Partner_Management\EstimateCost.php(54): PHPExcel_Reader_Excel5->load('??????xls') #3 {main} thrown in C:\xampp\htdocs\Partner_Management\PHPExcel\Shared\OLERead.php on line 76 ファイル名:予定.xls OS:WindowsXP Excel:Excel5 XAMPP:1.7.3 [php.ini] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = SJIS mbstring.encoding_translation = Off mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII mbstring.substitute_character = none; mbstring.script_encoding= Shift_JIS [phpファイルの文字コード] UTF-8

    • ベストアンサー
    • PHP
  • 【PHP】ダウンロードサイト作成中!zip開けない

    PHPについて質問です。 MSG,ZIPファイルダウンロードサイト作成しております。 ダウンロードして指定のフォルダに格納するところまではできました。 プログラムには、 $file_name= mb_convert_encoding($file_name,"sjis-win","UTF-8"); これを記載しています。 ダウンロードしたファイルをクリックすると、 「テキストファイル処理の確認」という、 文字コードを選択できるダイヤログが出てきます。 それを押しても開くことはできません。 どうしたらいいのでしょうか? 説明不足かと思いますので、ヒントだけでも教えていただけるとありがたいです。

    • ベストアンサー
    • PHP
  • MySQLでの文字化けについて

    すいません、教えてください。 PHP(PHP-5.2.4)でCSVファイル を読み込んでMySQL(4.1.22)に INSERTしているのですが文字化けします。 SJIS→utf8_general_ciです。 いろいろ調べて ~ $wk[$i] =mb_convert_encoding($csvfile[$i],'UTF-8','SJIS-win'); ~ とかやってみたのですがうまくいきません。 どなたかよろしくお願いします。

    • 締切済み
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • 文字エンコードについて

    Blogの更新をPHPで挑戦してみたのですが、文字化けしちゃって訳がわかりません… PHPのバージョンは5.1.6.6でバッチファイルを使用してます。 色々調べてみた結果Blogの方の文字コードがShift_JISみたいなので (PHPは基本UTF-8ですよね?) mb_convert_encodingかmb_convert_variablesの関数かなと思って使用してみたのですが結果はエラーがおきてしまい↓↓どうしていいのか分かりません、、 mb_convert_encoding(変換したい文字列, "SJIS", "auto"); mb_convert_variables("JIS", "UTF-8", 変換したい文字列); autoのところをUTF-8にしてもおなじでした… もちろん一つずつ試しました。 どなたかいい解決方法を教えて頂けませんか?

    • 締切済み
    • PHP
  • CSVダウンロードができません。

    PHP4とMySQL4.1.21で開発しています。 CSVダウンロードをしようと下記のように記述しましたが動きません。どこがおかしいでしょうか?教えてください。 print mb_convert_encoding("メールアドレス\n","SJIS","EUC-JP"); while ($Row = mysql_fetch_array($result, MYSQL_ASSOC)) { $mail=mb_convert_encoding($Row['mail'],"SJIS","EUC-JP"); print $vmem_mail."\"\n"; }

    • 締切済み
    • PHP
  • urlencodeしていない日本語をPATH_INFOで

    お世話になっております。 Wikipedia等のようにアクセスする際にURLに直接書いた日本語を PATH_INFOで受け取って処理をしたいのですが、うまくいきません。 試しに、 echo $_SERVER['PATH_INFO']; echo mb_convert_encoding($_SERVER['PATH_INFO'],"utf-8","sjis"); echo urldecode(mb_convert_encoding(urlencode($_SERVER['PATH_INFO']),"utf-8","sjis")); とした、BOM付UTF-8のPHPファイルに、 http://~/test.php/日本語 で[日本語]を色々変えてアクセスすると、 一行目と三行目は同じ結果になり、二行目だけ異なった結果となります。 一・三行目が上手く表示された時は二行目が文字化けしており、 一・三行目が文字化けした時は二行目が正常に表示されています。 (全てが文字化けすることもあります) どのようにすれば文字化けが起こらず、うまく受け取れるのかが分かりません。 本当はUTF-8ではなく、EUC-JPで行いたいのですが EUCはほとんどの場合、文字化けしてしまいます。 どのようにすれば良いのでしょうか。ご教授を宜しくお願い致します。 なお、php.iniは変更できません。

    • ベストアンサー
    • PHP

専門家に質問してみよう