Php fgetcsv选择性地忽略希伯来文字母

Php fgetcsv选择性地忽略希伯来文字母,php,wordpress,excel,csv,encoding,Php,Wordpress,Excel,Csv,Encoding,我试图阅读希伯来文的CSV文件,以便向Wordpress插入多篇文章。 我已将excel工作表保存为CSV(以逗号分隔)。 在升华文本中进行了一些编码操作之后,我通常在任何文本编辑器中都可以看到希伯来文内容 但是,当我尝试使用fgetcsv读取文件内容时,会有选择地忽略希伯来文字母,即字段中以数字或拉丁文字母开头的字母正确显示。数字/拉丁字母前的希伯来文字母将被忽略,并从输出中省略 如果我使用file\u get\u contents并使用var\u dump,我会正确地获取整个内容,因此问题在

我试图阅读希伯来文的CSV文件,以便向Wordpress插入多篇文章。 我已将excel工作表保存为CSV(以逗号分隔)。 在升华文本中进行了一些编码操作之后,我通常在任何文本编辑器中都可以看到希伯来文内容

但是,当我尝试使用
fgetcsv
读取文件内容时,会有选择地忽略希伯来文字母,即字段中以数字或拉丁文字母开头的字母正确显示。数字/拉丁字母前的希伯来文字母将被忽略,并从输出中省略

如果我使用
file\u get\u contents
并使用var\u 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);

给这个世界带来的语言
tu PAAMAYIM_NEKUDOTAYIM
现在在希伯来文字母方面出现问题的可能性不大;-)

var_dump
可能还不够!)Manvel的解决方案可能会对您有所帮助:

问题是该函数返回UTF-8(它可以使用
mb\u检测编码
),但不转换,这些字符 以UTF-8为例。因此,有必要对其进行反向转换 使用初始编码(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;
}

那么CSV文件现在到底是如何编码的呢?我用ISO8859-8在Sublime中重新打开了它,然后将它保存为UTF-8。如果我直接以UTF-8的形式打开它,我会得到一个问号。我最终使用了一个不同的自定义函数:我将整个内容作为一个字符串读取,并将其分解两次——用EOL和逗号。