0

複数の投稿をWordpressに挿入するために、ヘブライ語でCSVファイルを読み込もうとしています。Excel シートを CSV (カンマ区切り) として保存しました。Sublime Text でエンコード操作を行った後、どのテキスト エディターでもヘブライ語のコンテンツが正常に表示されます。

しかし、fgetcsvヘブライ文字を使用してファイルの内容を読み込もうとすると、選択的に無視されます。つまり、数字またはラテン文字の前にあるフィールド内の文字は正しく表示されます。数字/ラテン文字の前のヘブライ文字は無視され、出力から除外されます。

使用file_get_contentsして var_dump すると、コンテンツ全体が正しく取得されるため、問題がfgetcsv.

コードfunctions.php:

function csv_to_array($filename='', $delimiter=',')
{
    if(!file_exists($filename) || !is_readable($filename)) {
        return FALSE;
        }

    $header = NULL;
    $data = array();

    if (($handle = fopen($filename, 'r')) !== FALSE)
    {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {
            if(!$header): 
                $header = $row;
            else:
                $data[] = $row;
            endif;
        }
        fclose($handle);
    }
    return $data;
}

使用済み:

if (isset($_FILES['events'])) {
    extract($_FILES['events']);
    $events = csv_to_array($tmp_name);
4

1 に答える 1

1

世界T_PAAMAYIM_NEKUDOTAYIMを生み出した言語が、今ではヘブライ文字に問題を抱えている可能性はほとんどありません ;-)。

文字列のエンコーディングをチェックすること(十分ではないかもしれません!) と、この質問に対するvar_dumpManvel の解決策が役立つかもしれません:

問題は、関数が UTF-8 を返しますが ( を使用してチェックできます mb_detect_encoding)、変換せず、これらの文字が UTF-8 を使用することです。したがって、 iconvを使用して初期エンコーディング (Windows-1251 または CP1251) に逆変換する必要があります。ただし fgetcsv、配列を返すため、カスタム関数を作成することをお勧めします。

function customfgetcsv(&$handle, $length, $separator = ';'){
  if(($buffer = fgets($handle, $length)) !== false) {
      return explode( $separator, iconv( "CP1251", "UTF-8", $buffer ) );
  }
    return false;
}
于 2013-10-12T09:31:16.553 に答える