0

次の csv ファイルがあります。

"Id","Title","Body","Tags"
"101","this title","
\"">.</>"";
","c# asp.net excel table"

次のように配列に変換したい:

Array
(
    [0] => Array
        (
            [0] => Id
            [1] => Title
            [2] => Body
            [3] => Tags
        )

    [1] => Array
        (
            [0] => 101
            [1] => this title
            [2] => \"">.</>"";
            [3] => c# asp.net excel table
        )
)

私のコードは次のとおりです。

while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    $num = count($data);

    for ($c=0; $c < $num; $c++) {
        $data[$c] = strip_tags($data[$c]);
    }

    $result[$row] = $data;
    $row++;
}
fclose($handle);
return $result;

私の問題は、次の配列を取得していることです。

Array
(
    [0] => Array
        (
            [0] => Id
            [1] => Title
            [2] => Body
            [3] => Tags
        )

    [1] => Array
        (
            [0] => 101
            [1] => this title
            [2] => 
\">.</>"";
        )

    [2] => Array
        (
            [0] => ,c# asp.net excel table"
        )

)

一般に、フィールド内にコードが含まれている可能性がある場合に、あまりにも多くのレコードを検出しないようにするにはどうすればよいですか (これは StackOverflow データ ダンプであるため、一部のテキスト フィールドにはあらゆる種類のプログラミング コードが含まれます)。

4

2 に答える 2

1

この文字列は正しくエスケープされていません:

"
\""&gt;.&lt;/&gt;"";
"

すべての引用文字の前にバックスラッシュ (または適切なパラメーターに渡した他のエスケープ文字) が必要です。また、0 とコンマを fgetcsv に渡すべきではありません。それらは既にデフォルトになっています: http://php.net/fgetcsv

于 2013-10-01T14:14:24.627 に答える