dポイントプレゼントキャンペーン実施中!

やりたいことは、PHPでPOSTされた複数のデータを結合して、MySQLの一つのカラムに収めたいと思います。例えば、3つのフォームよりPOSTされてきたデータをカンマ区切りで結合して、それらをデータベースに登録し、読み込むときは、逆にカンマ区切りでexplode()で配列に分割したいと思います。

例えば、下記のように簡単なサンプルで表現していますが、POSTされてきた3つの変数データは英単語又は、フレーズが格納されており、ときどき、カンマを含むフレーズがある場合があります。この場合、カンマ区切りで結合することはできるのですが、分割したときに、英語フレーズに含まれるカンマでも分割されてしまいます。こういう場合、カンマのエスケープはどのようにやるのが適切でしょうか?

//$_POSTの中身
//$_POST['a'] = "Sunday";
//$_POST['b'] = "Monday";
//$_POST['c'] = "He is a teacher,isn't he?";

$text = $_POST['a'].",".$_POST['b'].",". $_POST['c'].","; //カンマで区切って結合

echo $text;
$text =explode(',',$text);  //カンマで分割
   print_r($text);

/*$textの出力結果 2と3に分割されてしまう。
array
(
[0] => Sunday
[1] => Monday
[2] => He is a teacher
[3] => isn't he?
[4] =>
)
*/

A 回答 (1件)

3つの方針が考えられます



(1) 「カンマ区切りをexplodeで」というのをやめて、別の書式を使う
・CSVで使われている「ダブルクオートで囲む」を使って
"Sunday","Monday","He is a teacher,isn't he?"
で保存→読み出したらCSV用ライブラリで分割
・元のデータに絶対に含まれない文字を区切りに使う。
http://php.net/manual/ja/function.serialize.php
http://php.net/manual/ja/function.json-encode.php


(2) データ中のカンマを別の文字列に変換→読み出し時に explode後に逆変換
http://php.net/manual/ja/function.urlencode.php


(3)そもそも「一つの列に納める」というテーブル設計自体を見直す
    • good
    • 1
この回答へのお礼

ありがとうござまいす。とても勉強になりました。

お礼日時:2018/01/02 09:07

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