2017-12-08 36 views
0

ISO-8859-1としてエンコードされた.csvファイルからデータを読み込み、 PostgreSQLデータベースはUTF-8としてエンコードされていますが、私が扱っているファイルの行に応じて2つのエラーが発生しています。エラーPHP fgetcsv()関数でデータを管理しているときに "未定義オフセット"と "UTF8をエンコードするためのバイトシーケンスが無効です"

私はfgetcsv()関数を使用してファイルからデータを取得しています:

while (($line = fgetcsv($handle,0,';','"')) !== false) { 

エラーが私はこのような関数を呼び出す行に「未定義オフセット」されています

$foo = my_function($file_line[$index]); 

PostgreSQLテーブルにデータを挿入しようとすると、「UTF8をエンコードするための無効なバイトシーケンス」というエラーが発生します。

ファイルには、日付フィールド、数値フィールド、特殊文字とアクセント付きの複数行テキストフィールドなどの複雑なデータが含まれています。すべての行に空白があってもすべてのフィールドがあります。

+0

私はこの問題を解決しようとしばらく時間を費やしましたが、私は同じような問題を持って他の人を助けるためにどのように解決したのですか?私はそれが幾分助けてくれることを願っている –

答えて

0

配列にインデックスが通知されていないため、エラー "未定義オフセット"が発生しました。しかし、それは持っている必要があります(すべてのファイル行にすべてのフィールドがあります)。

実際の問題はfgetcsv関数にありました。私は "エスケープ文字"を設定せず、テキストの最後にスラッシュ(デフォルトのエスケープ文字)がありました。これはfgetcsv関数を作成していました区切り文字を考慮しないで、配列データを混乱させる。

これは、このように、「chararcterをエスケープ」など、異常な文字を設定することで解決した。

while (($line = fgetcsv($handle,0,';','"','')) !== false) { 

エラー「UTF8を符号化するための無効なバイトシーケンスは、」データからすべての型破りな文字を削除することで解決してから変換しました

$field_content = preg_replace('/[^\x{0020}-\x{007E}\x{00c0}-\x{00fd}\x{000a}\x{0009}]/', '',$field_content); 
$field_content = utf8_encode($field_content); 
関連する問題