CSV出力に関するご質問 - PHPプロ!Q&A掲示板

2803

  • 0P

CSV出力に関するご質問

質問日時 / 2010年7月10日 13:20    回答数 / 2件

Questioner:  wahahaha  このエントリーをはてなブックマークに追加 

キーワード / ノンプログラマ    ノン・プログラマ   

ノン・プログラマのためのPHP入門の10日目のCSV出力ですが、
私が、初心者のため、同じような処理を2回しているように見える部分があります。

それが、下記です。 str_replaceで""(2重)にしているのはCSV出力のお決まりのようですが、
このとき、"""(3重)すれば、$csv_output .= "\"" . $value["create_datetime"] . "\","; で "を囲む必要は、ないのではないでしょうか?

$sql = "SELECT * FROM anq_t WHERE del_flag != '1' ORDER BY create_datetime DESC";
$anq_list = $db->getAll($sql,DB_FETCHMODE_ASSOC);
$csv_output = "\"回答日時\",\"名前\",\"性別\",\"年代\",\"好きな動物\",\"コメント\"\n";

foreach ((array)$anq_list as $key => $value) {
foreach ($value as $key2 => $value2) {
$value[$key2] = str_replace('"', '""', $value2);                       ←ここの処理
}
$csv_output .= "\"" . $value["create_datetime"] . "\",";
$csv_output .= "\"" . $value["name"] . "\",";


ツリー一覧

┗A01yuu_a0>> str_replaceで""(2重)にしているのはCSV出力のお
 ┗A01-1wahahahaありがとうございます!!! 納得です! おかげ

回答一覧

並び替え:

A01 満足
answereryuu_a0 [7月10日 14:09] (最終編集:7月10日 14:21)

>> str_replaceで""(2重)にしているのはCSV出力のお決まりのようですが、
このとき、"""(3重)すれば、,,,

str_replace のくだりは、そういうことではありません。

まず、データーベースから出力されたものは、(意図的に囲まなければ)生の文字列などのデータであり、二重引用符で囲まれているわけではありません。

 $value["name"] の中身は "xxx" では無く、xxx

次に、CSV の記述について、
RFC4180 によれば、各フィールドは二重引用符で囲んでもよく、囲んだ場合でフィールド中に二重引用符を含む場合は、二重引用符でエスケープする必要がある。
str_replace は、フィールド中の " をエスケープする処理であって、囲みを二重にしているわけではありません。

cf) http://www.rfc-editor.org/rfc/rfc4180.txt

要するに、
 × "aaa","b"bb","ccc"
 ○ "aaa","b""bb","ccc"

この意見に回答する

ツリーへ TOPへ

A01-1
replyerwahahaha [7月10日 18:25]

ありがとうございます!!!

納得です!

おかげさまで、解決できました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)