fgetcsv有选择地忽略了希伯来字母

时间:2013-10-12 08:59:53

标签: php wordpress excel csv encoding

我正在尝试用希伯来语读取CSV文件,以便向Wordpress插入多个帖子。 我已将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);

1 个答案:

答案 0 :(得分:1)

给世界T_PAAMAYIM_NEKUDOTAYIM的语言现在不太可能出现希伯来字母的问题; - )。

Checking the encoding of the stringsvar_dump可能还不够!)Manvel对this question的解决方案可能对您有所帮助:

  

问题是该函数返回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;
}