0

fread で多くのオプションを見てきましたが (これにはファイルまたはメモリへの書き込みが必要です)、既に受け入れられている文字列 (不明な形式) に基づいて入力を無効にしようとしています。私はこのようなものを持っています

        if (FALSE !== str_getcsv($this->_contents, "\n"))
        {
            foreach (preg_split("/\n/", $this->_contents) AS $line)
            {
                $data[] = explode(',', $line);
            }

            print_r($data); die;
            $this->_format = 'csv';
            $this->_contents = $this->trimContents($data);

            return true;
        }

これは実際の csv または csv で埋められた変数では問題なく動作しますが、ガベージを渡して無効にしようとすると、次のようになります: とにかくその csv を信じて、プログラムがチョークするまでずっと続けます。どうすればこれを修正できますか? 少なくともいくつかのクラスの深さではない CSV バリデーターを見たことがありません。(in)validate するための単純な 3 行または 4 行はありますか?

4

2 に答える 2

1

システムに入る可能性のある CSV の種類がわかっている場合は、ヒューリスティックを適用できますが、有効な CSV を受け入れないリスクがあります。たとえば、行の長さ、行の長さの一貫性、特殊文字などを調べることができます...

コンマと改行の存在を確認するだけであれば、十分に大きなランダム ファイルにはそれらが含まれている可能性が高く、そのような CSV テストに合格します。

于 2013-11-01T22:51:17.050 に答える
1

(in)validateするための単純な3行または4行はありますか?

いいえ。CSV は非常に大まかに定義されています。ヘッダー バイトのような明確な兆候はなく、列を区切るために使用される文字の標準さえありません。-ファイルがCSVであるかどうかを技術的に判断する方法はありません-PNGでさえ、技術的には、難解なフィールドと行区切りのある巨大な1列のCSVである可能性があります。

検証のために、CSV ファイルを使用している目的と、期待している入力を確認してください。ファイルには、たとえば 10 列に分割された住所データが含まれますか? 次に、ファイルの最初の行を見て、十分な数の列が存在するかどうか、およびそれらに英数字データが含まれているかどうかを確認します。数字でいっぱいの CSV ファイルをお探しですか? 次に、最初の行を解析し、必要な種類の値を探します。等々...

于 2013-11-01T22:52:31.747 に答える