すみません6時間詰まったので教えてください
PHPで作った自作のサポートページからデータ量が多くなった時のためにcsvエクスポート機能を付けようと思って試行錯誤しています。
問い合わせ内容は見やすくするようにnl2brを使ってmysqlに保存しています。
(SQL上も本文は<br />で表示され改行されています)
mysql上からエクスポートした時に<br />表記が何をしても消えません。
検索して最終的に試したコードは下記となります。(改行対応のところ)
<?php session_start(); $pj_name=$_SESSION['pj_name']; $export_m=$_POST['export_month']; $dsn = 'mysql:dbname=***;host=127.0.0.1;charset=utf8;'; $user = '***'; $password = '***'; try{ $pdo = new PDO($dsn, $user, $password); //データベースに接続 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM user where date_format(dt,'%Y%m') = '$export_m' and pj='$pj_name'"; // SQL文をセットする $stm = $pdo->prepare($sql); // SQL文を実行する $stm->execute(); // 結果の取得(連想配列で返す) $result = $stm->fetchAll(PDO::FETCH_ASSOC); $filename=$export_m.'ファイル.csv'; $csv = ''; foreach ($result as $row){ echo $row['dt'].','; echo $row['uniqid'].','; echo $row['name'].','; echo $row['companyname'].','; echo $row['subject'].','; echo '"'.$row['content'].'"'.','; //本文 echo $row['status2']."\n"; //カンマ対応 $row = str_replace(',', '","', $row); //改行対応 $row=str_replace(array("\r\n","\r","\n","<br>","<br /",'<br>','<br />'), '', $row); } header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$filename"); echo mb_convert_encoding($csv,"SJIS", "UTF-8"); $pdo=null; //データべース接続を解除 } catch (PDOException $e){ echo '接続に失敗しました。'; echo 'Error:'.$e->getMessage(); exit(); } ?>
改行するとセルが分かれてしまう問題は""で挟んで解決したのですが、一部セルが分かれてしまいます。($row['content']部分)
文章内に特殊文字(<>や"")があった時の対処でnl2br(h($_POST['***'])); を使っていることが原因のような気がしますが、csv出力時に(本文が)全て1セルに収まるやり方などがありましたらこちらも併せてご教示願います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。