1

データベースにアップロードする必要がある .csv ファイルがあります。そのデータを解析して複数のデータベース テーブルに挿入する既存の PHP スクリプトが既にあり、これは正常に機能しています。最新の csv ファイルでエラーが発生しています。

私はこれを修正することはできません。これは特殊文字を含まない単純な英語のテキストですが、特定の行でエラーが発生し続けます。

これは、そのような行の 1 つの例です。

リスクとリターンのバランスをとることを目的とした投資戦略です。

これは、アップロード中に発生するエラーです

ERROR=1366 - 不正な文字列値: 行 1 の列「質問」の「\xA0strat...」

表の文字セットは UTF-8 で、列の質問は TEXT 型です

WindowsコマンドプロンプトでPHPスクリプトを実行しています-それと関係があると感じています。しかし、以前のすべての場合、他の CSV ファイルの場合、php スクリプトは Windows 自体で実行されていました。

上記の英語のテキストをメモ帳に入力して CSV ファイルに挿入すると、正常に動作しますが、このエラーが発生する行が 500 行以上あり、メモ帳に各行を入力してから CSV に貼り付けることはできません。

***編集** * ** * *** これはコードを生成するエラーです

foreach($question_array as $question)
{
   //INSERT QUESTION テーブル
   mysql_query("INSERT INTO adl_question (question) VALUES ('".$question."')",$con);
   echo 'ERROR='.mysql_errno($con).'-'.mysql_error($con);
   $question_id = mysql_insert_id();
}

任意の洞察ありがとう

4

2 に答える 2

3

最近データ変換を行っているときにこの問題に遭遇しました。あなたがする必要があるのは、iconvを使用して明示的にWINDOWS-1250(または「悪い」テキストをエンコードする文字)として読み取り、UTF-8に戻すことです。

<?php 
$string = iconv('windows-1250', 'utf-8', $badString);
?>

詳細については、http: //us3.php.net/manual/en/function.iconv.phpを参照してください。

ファイル全体に対してこれを行う必要がある場合は、この関数を使用できます (私は書いていません):

<?php 
function utf8_fopen_read($fileName) {
    $fc = iconv('windows-1250', 'utf-8', file_get_contents($fileName));
    $handle=fopen("php://memory", "rw");
    fwrite($handle, $fc);
    fseek($handle, 0);
    return $handle;
}
?>

そして、次のように実装します。

<?php 
if (($handle = utf8_fopen_read("mycsv.csv")) !== FALSE) {

    while($file = fgetcsv($handle)) {
        $csv[] = $file;
    }

    foreach($csv as $row) {
        // run insert here
    }
}
?>
于 2012-07-23T14:21:51.873 に答える
0

エラー文字列は、テキストに非ASCII文字があることを示しています。たとえば、char \xA0 はほとんどのエディターで空白として表示されますが、ASCII の範囲外です。あなたの例では、「戦略」という単語の直前にこれらの文字のいずれかが必要です。

優れた 16 進エディタは、実際に文字列に含まれる文字を表示します。面倒なテキストを表示するためにメモ帳++を使用しており、特別な文字表示を有効にする必要があります。

于 2012-07-23T14:22:22.960 に答える