• 締切済み

CSVファイルへの書き込み:文字化けしてしまいます

こんにちわ。 HTMLファイルから送られてきた3つのデータ(toi,kotae,yomi)を サーバ上のCSVファイルに書き込むプログラムを作りましたが、文字化けしてしまいます。 尚、同じプログラムをPC内のXAMPP環境で動かしていた際は、文字化けは起こりませんでした。 開発は「メモ帳」で行っています。 よろしくお願いいたします。 ***** ↓クライアント側のHTML <html> <head> <title>send data</title> </head> <body> <form name = "myform" action = "data_to_csv.php"> 問い: <input type = "text" name = "toi" value = ""><br> 答え: <input type = "text" name = "kotae" value = ""><br> 読み: <input type = "text" name = "yomi" value = ""><br> <p> <input name= "mybutton" type="submit" value="click" > </form> </body> </html> ***** ↓サーバー側のプログラム <html> <head> <title>the item added to the csv file</title> </head> <body> The items were sucessfully added to the CSV file.<br> <?php $toi = $_REQUEST['toi']; $kotae = $_REQUEST['kotae']; $yomi = $_REQUEST['yomi']; $lines=array($toi, $kotae, $yomi); $lines=implode(",", $lines); $lines=$lines."\n"; //write to a csv file $fp=fopen("data.csv", "a"); // flock($fp, LOCK_EX); fputs($fp, $lines); fclose($fp); ?> </body> </html>

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • rally
  • ベストアンサー率28% (32/111)
回答No.1

データベースの文字コードが異なるためですね。 PC側は、メモ帳でソースを書いてるとのことなので、"Shift_JIS"でしょう。 (1).データベースの文字コードを調べて、その文字コードに変換するか、 (2).データベースの文字コードを"Shift_JIS"に変更するか。 (1)の場合、mb_convert_encodeを使います。 (2)は、データベースによってやり方が違うので、調べてみてくださいね。

nice-chap
質問者

補足

こんにちわ。レスありがとうございます。 全然根拠はないのですが、メモ帳の文字コードをunicodeにしたら改善するでしょうか? データベースは使っていないので、データベースの文字コードを帰るという意味がわからないです。すみません。 mb_convert_encodeとはPHPの命令でしょうか?

関連するQ&A

  • php ファイルの書き込み読みだし

    htmlフォームから回答 phpで処理計算しlog.csvに保存、log.csvファイルを読みだしその結果をブラウザに表示するスクリプトを書いておりますが、log.csvファイルを読みだして結果を表示の部分が調べてもできなくて困っております。どなたか知恵を貸してほしいです。批判や中傷などは書かないでください。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi5.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BOBY> <p> <Div Align="center">名前</p> <?php print $_POST["onamae"]; ?> <p> <?php if(isset($_POST["gender"])&&($_POST["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<BR>"; } ?> <?php session_start(); if (isset($_SESSION["gender"])) { $_SESSION["gender"]++; print($_SESSION["gender"]."回目"); } else { $_SESSION["gender"] = 0; } ?> <p> </p> <?php if($_POST["syokugyou"]<>""){ print"職業:<BR>"; print$_POST["syokugyou"]; }else{ print"職業をえらんでください<BR>"; } ?> <?php if (isset($_SESSION["syokugyou"])) { $_SESSION["syokugyou"]++; print($_SESSION["syokugyou"]."回目"); } else { $_SESSION["syokugyou"] = 0; } ?> <p> </p> 満足度を答えてください<BR> <?php if(isset($_POST["hobby"])){ $hobby=implode($_POST["hobby"]); print $hobby; }else{ } ?> <?php if (isset($_SESSION["hobby"])) { $_SESSION["hobby"]++; print($_SESSION["hobby"]."回目"); } else { $_SESSION["hobby"] = 0; } ?> <?php // 出力 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html> </BOBY> </HTML>

    • ベストアンサー
    • PHP
  • php CSVファイル出力後その結果をブラウザ

    php CSVファイル出力後その結果をブラウザに返す処理について 先ほど質問しどう頑張ってもエラーがでてしまい自分の力ではもう無理だと思い再度質問させていただきました。アンケートフォーム→回答ボタンを押すとCSVファイル変換後(ここまではできてます)その後CSVファイルの内容をブラウザに返したいのですがうまくいきません。どなたかたすけてほしいです。良い回答が得られないようならば諦めることにいたします。批判、中傷のコメントは受け付けません。 <HTML> <HEAD> <TITLE>テキスト送信のテスト></TITLE> </HEAD> <FORM name="toi_5.html"method="post" action="toi51.php"> <Div Align="center">名前:<BR> <INPUT type="text"name="onamae"> <BR> 性別:<BR> <INPUT type="radio"name="gender" value="男">男<BR> <INPUT type="radio"name="gender" value="女">女<BR> <BR> <SELECT name="syokugyou"> <OPTION value""selectd>職業をえらんでください</OPTION> <OPTION value"学生">学生</OPTION> <OPTION value"会社員">会社員</OPTION> <OPTION value"公務員">公務員</OPTION> <OPTION value"自営業">自営業</OPTION> <OPTION value"その他">その他</OPTION> </SELECT><BR> <p></p> 満足度を答えてください:<BR> <INPUT type="checkbox" name="hobby[]" value="満足"> 満足<BR> <INPUT type="checkbox" name="hobby[]" value="やや満足"> やや満足<BR> <INPUT type="checkbox" name="hobby[]" value="普通"> 普通<BR> <INPUT type="checkbox" name="hobby[]" value="やや不満"> やや不満<BR> <INPUT type="checkbox" name="hobby[]" value="不満"> 不満<BR> <BR> <INPUT type="submit" value="回答"> </div> </FORM> </BOBY> </HTML> <?php if(isset($_post["gender"])&&($_post["gender"]=="男"|| $_POST["gender"]=="女")){ print"性別:<BR>"; print $_POST["gender"]; }else{ print"性別を選んでください。<br>"; } ?> ?> <p> <?php if($_post["syokugyou"]<>""){ print"職業:<br>"; print$_post["syokugyou"]; }else{ print"職業をえらんでください<br>"; } ?> <p> <br>満足度 <?php if(isset($_post["hobby"])){ $hobby=implode($_post["hobby"]); print $hobby; }else{ } ?> <?php // 保存 $fileName = "log.csv"; header('Content-Disposition: attachment; filename=' . $fileName); ?> </div> </body> </html>

    • ベストアンサー
    • PHP
  • java script 1から100までの計算

    子供の科学で以前1から100までの計算をするプログラムを紹介していましたが その最後に自分で入力した数字を入れるとその数値から計算してくれるようになると 書いてありましたが、どうやってもできません。誰かご教授願いますでしょうか? 今はここまでつくりました。入力した数値が反映されるように宣言はしたのですが答えが めちゃくちゃでどうしようもありません。 <html> <head> <title>1から100まで足すといくつ?</title> <script language="JavaScript"> function Goukei(){ kotae=0; for(i="a1";i<"a2";i++){ kotae=kotae+i } alert("1から100まで足した合計は"+kotae+"です"); } </script> </head> <body> <form name ="F1"> <input type="text" value="1" name="a1"><br> <input type="text" value="5" name="a2"><br> <input type="button" name="B1" value="答えを表示" onClick="Goukei()"> </from> </body> </html>

  • アンケートフォームのvalueの値をCSVには数字で書き込み、確認画面では文字を表示したい。

    アンケートフォームで以下のようにoptionタグのvalueの値は東京、大阪、名古屋という風に確認画面で表示し、CSVには、東京なら1、大阪なら2名古屋なら3というふうに書き込めるようにしたいのですが、やり方がわかりません。valueの値を文字にしてしまうと当然CSVには文字が入ってしまい、valueの値を数字にしてしまうと確認画面は数字になってしまいます。。 このような場合どういう記述のしかたがありますでしょうか。ご教授願います。よろしくお願いします。 sub page3{ print <<"EOF"; Content-type: text/html <html> <head> <meta content="text/html; charset=shift_jis"> <title></title> </head> <body> <form method="post" action="$script"> □出身地はどちらですか?<br> <select name="ken"> <option value="東京">東京 <option value="大阪">大阪 <option value="名古屋">名古屋 </select> <input type="hidden" name="action" value="kakunin"> <input value="送信" type="submit"><br> <input value="リセット" type="reset"> </form> </body> </html> EOF } #確認画面 sub kakunin{ ~ } #CSVに書き込む sub csv{ open(FILE, "<$file") or &err2('エラーです。'); @lines= <FILE>; close(FILE); unshift(@lines,"$ken\n"); open(OUT, "+<$file") or &err2(); print OUT @lines; close (OUT); }{

    • ベストアンサー
    • CGI
  • 小数の足し算

    Javascriptで <SCRIPT language="JavaScript"><!-- function wa() { a = eval( document.myFORM.a.value ); b = eval( document.myFORM.b.value ); s = a + b; document.myFORM.kotae.value="答え " + s; } //--></SCRIPT> </HEAD> <BODY> <FORM name="myFORM"> A =<INPUT type="text" name="a" size="3">B =<INPUT type="text" name="b" size="3"><BR> <INPUT type="text" name="kotae"><INPUT type="button" value="=" onclick="wa()"> </FORM> </BODY> としたとき A=0.1 B=0.05とすると 答え 0.15000000000000002となるのはなぜですか?

  • Netscapeだと文字化け!

    まずは下記のHTMLをご覧下さい。 <html> <head> <title>tes</title> </head> <SCRIPT LANGUAGE=JAVAScript> <!-- function cp_text( ) { document.fr_test.right.value = document.fr_test.left.value ; } function cp_text1( ) { document.fr_test.right.value = escape(document.fr_test.left.value) ; } function cp_text2( ) { var n = unescape(document.fr_test.right.value) ; document.fr_test.right.value = n; } //--> </SCRIPT> <body> <form name="fr_test"> テキスト1 <input type="text" name="left" size="10" maxlength="10"><BR> テキスト2 <input type="text" name="right" size="10" maxlength="10"><BR><BR> <input type="button" name="btn_tes" value="コピー開始" onclick="cp_text()"><BR> <input type="button" name="btn_bin" value="テキスト2をHEX変換" onclick="cp_text1()"> <input type="button" name="btn_bin" value="テキスト2をDEC変換" onclick="cp_text2()"> </form> </body> </html> ------------------------------------------------ 以上のように記述されたHTMLがあります。 これをNetscapeで起動させるとテキストボックスが2つ表示されます。 ここで「テキスト1」の方に(1)、(2)みたいなコード(ローマ字でしょうか?) これを入力させて下にある「コピー開始」ボタンを押すと テキスト2の方へ値がコピーされてしまうのですが、 ローマ字文字が文字化けしてしまいます。 これをIEで起動すると文字化けはおきないのですが。 これをNetscape上で文字化けを起こさずにコピーすることは できないのでしょうか?

    • ベストアンサー
    • HTML
  • フォームデータのcsv保存について

    お世話になります。フォームに入力されたデータを csvファイルに保存するというcgiの作成をしています。 初めてcgiを作成するので、書籍の真似をして作成した のですが、おかしいデータが保存されてしまいます。 質問の項目数は5個で以下のとおりです <FORM ACTION="./ans1.cgi" METHOD="POST"> 名前:<br> <input type="text" name="name" size=30> <br> 1:<br> <input type="text" name="a1" size=30> <br> 2:<br> <input type="text" name="a2" size=30> <br> 3:<br> <input type="text" name="a3" size=30> <br> 4:<br> <input type="text" name="a4" size=30> <br> <INPUT type="submit" value="送 信"> <INPUT type="reset" value="リセット"> <BR> </FORM> cgiの中身です。 #! /usr/bin/perl require './cgi-lib.pl'; $answer = 5; $ansfile = "kotae.csv"; &ReadParse(*in); $name = $in{'name'}; for($n = 1; $n <= $answer; $n++ ) { $a[$n] = $in{"a$n"}; } open (FILE,">>$ansfile"); flock (FILE,2); print (FILE "\"", $name); for($i = 1; $i <= $answer; $i++ ) { $a[$i] = ~ s/\"/""/g; print FILE "\"\,\""; print FILE $a[$i]; } print FILE "\"\n"; flock(FILE,8); close(FILE); print "Content-type: text/plain\n\n"; print "<HTML><BODY>\n"; print "tesuto"; print "</body></HTML>"; exit; csvファイルの中身を見ると、最初の列には、項目1で 記入したデータが入ってますが、項目2以降 は4294967295と数字が入ってます。どうも1個目の回答 欄のデータはちゃんと取得されてるのですがそれ以降の が取得されていないみたいです。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • JavaScript テキストボックス キーイベント

    JavaScript テキストボックス キーイベント こんにちは。趣味でプログラミングをしている者です。 タイマーを使って計算ドリルを作ったのですが、 特定のキーコードで正解かどうか判定する関数を呼び出そうとしたのですが、 テキストボックスにこたえを入力して、キーを押すたびに 「キーン」というような音が鳴るのですが、 その音は、どのような仕組みで鳴るのでしょうか? また、音を鳴らさないようにする方法がありましたら、 教えていただけないでしょうか よろしくお願いします <html> <head> <script type="text/javascript"> function init() { document.attachEvent("onkeypress", KotaeAwase); } function KotaeAwase() { if( event.keyCode == 13) { var key = 1; var kotae = parseInt( document.Form1.kotae.value ); var Result = document.Form1.result; if( kotae == key ) Result.value = "せいかいです!"; else Result.value = "ちがいます"; } } </script> </head> <body onLoad="init();"> <form name="Form1"> <input type="text" name="kotae" size="20"> <br><br> <input type="text" name="result" size="20"> <br> </form> </body> </html>

  • phpによるアンケート csvに保存

    <html> <p> </p> <Div Align="center"> <h3>アンケート</h3> <form name="form" action="log.csv" method="GET"> <div> <p> お名前を入力して下さい:<br> <input type="text" name="simei"> </p> <p> 性別を選んで下さい。<br> <input type="radio" name="gender" value="男性">男性です<br> <input type="radio" name="gender" value="女性">女性です<br> </p> <p> 好きなスポーツ: <select name="favorite_sports"> <option value="バスケットボール">バスケットボール</option><br> <option value="野球">野球</option><br> <option value="サッカー">サッカー</option><br> <option value="テニス">テニス</option><br> </select><br> <br> <p> 満足度をこたえてください<br> <input type="checkbox" name="check1" value="満足"/> 満足<br> <input type="checkbox" name="check2" value="やや満足"/>やや満足 <br> <input type="checkbox" name="check3" value="ふつう"/> 普通<br> <input type="checkbox" name="check3" value="やや不満"/> やや不満<br> <input type="checkbox" name="check3" value="不満"/> 不満<br> </p> <p> <p> <input type="submit" name="submit" value="回答"> </p> <?php if( isset( $_POST[ 'log.csv' ] ) ){ //テキストボックス「log.csv」に入力された内容を表示 print "送信された内容は{$_POST['log.csv']}です。\n"; } ?> </div> </body> </html> 回答ボタンを押すと内容をcsvに保存するアンケートを作りたいのですがcsvに全く反映されて内容で困っております。どなたか助けてほしいです

    • ベストアンサー
    • PHP
  • 任意の行を修正し、ファイルを上書きしたいのですが…

    <html> <head> <title>修正・変更</title> </head> <body> <?php  $aaa = $_POST['aaa'];  $bbb = $_POST['bbb'];  $ccc = $_POST['ccc'];  $dummy = $_POST['hidden'];  $lines = array($aaa, $bbb, $ccc,$dummy);  $lines = implode(",", $lines);  $lines = mb_convert_encoding($lines, "SHIFT-JIS" , "EUC-JP");  $file = file('sample.csv');  $file[$i] = $lines."\n";  $fp = fopen("sample.csv","w+");  for($i=0 ; $i<count($file) ; $i++) {   flock($fp, LOCK_EX);   fwrite($fp, $file[$i]);  }  fclose($fp); ?> <div align="center"> 修正・変更しました!! <br><br> <input type="button" name="button" value="戻る" onClick="location.href='aaa.php'"> </div> </body> </html> 上記の様なプログラムを「CSVファイルを書き込む方法」を基に書いて みました。 しかしながら、どうしても任意の行のデータを修正して上書きする ことができません(涙 どうやったら任意の行のデータかどうかを認識して、上書きする事が できるのでしょうか?? 皆様お忙しい中かとは思いますが、ご教授して頂けませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP