忙しい現代人の腰&肩のお悩み対策!

<?php

$test1 = 'test01';
$test2 = 'テスト02';
$test3 = '実験03';

if( $handle = fopen( 'test.csv', 'a' ) ){
fputcsv( $handle, Array($test1,$test2,$test3) );
}
fclose($handle);
?>

↑のように csvファイルに変数にいれた文字列を挿入しています。このままでは日本語が文字化けします。日本語が文字化けする対処法をおしえてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

文字エンコード変えましょう

    • good
    • 0
この回答へのお礼

ありがとうございます。エクセルの出力用に変換しないとだめなのですね。

<?php

$test1 = 'test01';
$test2 = 'テスト02';
$test3 = '実験03';

$test = array($test1,$test2,$test3);
mb_convert_variables("SJIS-win", "UTF-8", $test);


if( $handle = fopen( 'test.csv', 'a' ) ){

fputcsv( $handle, $test);
}
fclose($handle);
?>

でうまくいきました。 よいやり方かどうかはわかりませんが。

お礼日時:2016/06/05 11:38

mb_convert_variablesは



$hogehoge = mb_convert_variables(・・・
と文字コードを変換したものを別の変数に入れるものなのです。

http://php.net/manual/ja/function.mb-convert-var …

配列にする前なのか、配列でも変換できるかはとりあえず調べてみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。確認してみます。

お礼日時:2016/06/05 22:40

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

Q連想配列からの値の取り出し

お世話様です。

タイトルにもありますが連想配列を作成した後(以下に記述例)に
その配列からキーを指定して値を取得したいと思っております。
array_keys関数だと値を指定してキーを取得するみたいで
うまくいきませんでした。
何かよい方法ありませんでしょうか?

//配列に格納
while (条件) {
  $aParaOra += array((キー) => (値));
}

Aベストアンサー

解答番号No.1の者です。

ちなみに、キーの指定なしで全部取得するのであれば、
array_values($aParaOra)
で、配列化されたものが返ってきます。

もしくは、以下のようにforeachでループすれば、
キーと値を分離して取得できます。
foreach ($aParaOra as $key => $value) {
# $aParaOra[$key]の値が、$value
}

質問者さんが何をしたいのかがいまいちピンときません。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?

Q配列をファイルに書き込む方法

下記($dataに入ってる)配列をファイルに書き込みたいのですが、書き込み方法が分かりません、教えていただけませんでしょうか・・・。
$dataの中身は
Array
(
[0] => あいうえお
[1] => かきくけこ
[2] => さしすせそ
[3] => たちつてと
)
これを
$fp=fopen("1.txt","w");
fputs($fp,$data);
fclose($fp);
にするとArrayとだけ表示されます。
あいうえお\n
かきくけこ\n
さしすせそ\n
たちつてと\n
と書き込みたいのですが・・・、お願いします。

Aベストアンサー

<?php
$data = Array(
0 => 'あいうえお',
1 => 'かきくけこ',
2 => 'さしすせそ',
3 => 'たちつてと'
);
$fp=fopen("1.txt","w");
foreach ($data as $a){
fputs($fp,$a."\n");
}
fclose($fp);
?>

↑これでいかがでしょうか?

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

Qfputcsv()で1レコード1行になるように書き込みたい

PHPでメールフォームを作成しており、ログをCSVファイルで取ろうと考えています。

下記のようなコードで作成してみたのですが、送信すると
[1行目]あああ
[2行目]いいい
[3行目]ううう
という感じで改行して記録されてしまいます。
これを、
[1行目]あああ,いいい,ううう
[2行目]かかか,ききき,くくく
という形で、1レコード1行になるように記録できないでしょうか。

どうぞよろしくお願いします。

---以下コード---
<?php
//フォームの値を取得
if ($_SERVER["REQUEST_METHOD"] == "POST"){
  foreach ($_POST as $k => $v){
    //「magic_quotes_gpc=On」のときはエスケープ解除
    if (get_magic_quotes_gpc()){
      $v = stripslashes($v);
    }
    $v = htmlspecialchars($v);
    $$k = $v;
  }
}

//言語コード指定
mb_language('Japanese');
mb_internal_encoding("SJIS");

//保存ファイル
$file_name = "file.csv";

//配列を作成
$array = array($name , $phone , $add);

//ファイルを開く
$file = fopen($file_name, "a+") or die("OPENエラー $file_name");

//書き込み
if (is_array($array)){
  foreach($array as $list){
    fputcsv($file, split(',',$list));
  }
}
else {
  echo "<p>書き込みエラー</p>";
}

//ファイルを閉じる
fclose($file);
?>

<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
  <fieldset><legend>フォーム</legend>
    名前:<input name="name" id="name" type="text" size="40" value="" /><br />
    電話:<input name="phone" id="phone" type="text" size="40" value="" /><br />
    住所:<textarea name="add" id="add" cols="40" rows="2"></textarea><br />
    <input name="submit" type="submit" value="送信" />
  </fieldset>
</form>

PHPでメールフォームを作成しており、ログをCSVファイルで取ろうと考えています。

下記のようなコードで作成してみたのですが、送信すると
[1行目]あああ
[2行目]いいい
[3行目]ううう
という感じで改行して記録されてしまいます。
これを、
[1行目]あああ,いいい,ううう
[2行目]かかか,ききき,くくく
という形で、1レコード1行になるように記録できないでしょうか。

どうぞよろしくお願いします。

---以下コード---
<?php
//フォームの値を取得
if ($_SERVER["REQUEST_METHOD"] == "POST"){
...続きを読む

Aベストアンサー

ああ、たぶん、マニュアルに書いてあるサンプルソースを見て、勘違いしちゃったんですね。(あのサンプルは紛らわしいね)
  foreach($array as $list){
    fputcsv($file, split(',',$list));
  }
を、単純に
  fputcsv($file, $array);
としてみてください。
fputcsvの出力データは、一行分をまとめて配列で渡してあげればOKです。
既に、一行分がまとめて配列に入っているようですので、foreachやsplitはいりません。

Qファイル書込みで一行もしくは部分的に上書きする

教えて下さい。
下のようなテキストデータがあります(sample01.txtとします)
(内容)
1111000000000000
1111000000000000
1111000000000000
これを
1111000000000000
1111001111110000
1111000000000000
と言うふうに2行目もしくは部分的に上書きして保存したいです。
よろしくお願いします。

Aベストアンサー

この問題に対するよくある解決策です。下に行くほど手間ですが大きなデータが扱えるようになります。

1.ファイルが小さければ、全部配列に読み込んで、必要な操作を行ったあと同じファイル名で書き出す

2.ファイル名を変更してバックアップファイルとする作る。
バックアップを読み込み専用で開き、元のファイル名で新しいファイルを書き込みモードwで開く。

1行ずつfgetsで読み込み、ファイルにfputsで書き出す。
操作したい行が来たらその操作を行って同様にファイルに書き出す。
残りを全部書き出しす。
全部成功したらバックアップを削除する。エラーが起きたら編集中のファイルは削除してバックアップを元のファイル名にする

3.1行の長さを決まった長さにして(いわゆる固定長レコード)r+モードでfopenし、レコード長xレコード数で目的の場所にfseekして特定のレコードをfread/fwriteで上書きする。レコードの修正かレコードの末尾の追加の操作は効率がいい。レコードの挿入・削除が発生するときは全部fread/fwriteする。

4.ファイルが巨大で全部fread/fwriteするが重い処理になるなら、別途索引ファイル(インデックス)をつくり、レコードの追加はファイル末尾に追記し、インデックスファイルに検索キーとレコードの番号かファイルポインタの位置を記録する。これで目的のレコードがファイル中のどこにあるかを知ることができる。レコードの削除はインデックスに目印をつけるだけにして、実際にディスクから消去するのは負荷の低いときにガベージコレクションで行う。

5.4までやるくらいなら出来合いのデータベースを使うほうがよい。MySQLとかPostgresqlなど。

この問題に対するよくある解決策です。下に行くほど手間ですが大きなデータが扱えるようになります。

1.ファイルが小さければ、全部配列に読み込んで、必要な操作を行ったあと同じファイル名で書き出す

2.ファイル名を変更してバックアップファイルとする作る。
バックアップを読み込み専用で開き、元のファイル名で新しいファイルを書き込みモードwで開く。

1行ずつfgetsで読み込み、ファイルにfputsで書き出す。
操作したい行が来たらその操作を行って同様にファイルに書き出す。
残りを全部書き出しす...続きを読む

Qシェルスクリプトからphpファイルを実行する方法

phpのカテゴリなのか迷いましたが、質問させて下さい。


実行するファイルは、a.php、b.php、c.phpの3ファイルになり、SQL文が記載されています。
この3ファイルを.sh(シェルスクリプト)から実行したいと考えております。
どなたか参考サイトまたは実装方法をご教示頂けないでしょうか。

よろしくお願いいたします。

Aベストアンサー

php a.php
php b.php
php c.php

こんな感じ?

参考URL:http://manual.xwd.jp/features.commandline.html

QリンクでPOSTデータを送信することは可能ですか?

はじめまして。
Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか?
やはりURLにデータを付加して送信するしかないのでしょうか?
ご教授よろしくお願い致します。

Aベストアンサー

javascript を使えば可能です。大雑把にはこんな感じ。

・パラメータが全部 hidden な form を記述しておく(ブラウザでは表示されない)
・<a href> では、その form を submit するように javascript を記述する

試してないですけど、こんな感じ。

<form name=f method=POST action="http://どこか">
<input type=hidden name=x1 value=v1>
</form>

<a href="javascript:document.f.submit()">リンクから submit</a>


人気Q&Aランキング