Php писать иврит /UTF -8 в csv

Привет, я пытаюсь написать CSV с текстом HEBREW. Он пишет некоторый символ, а не еврейский текст. Ниже мой PHP-код.

<?php
    $list = array (
                array('שלטל', 'שלטל', 'שלטל', 'שלטל'),
                array('123', '456', '789'),
                array('"שלטל"', '"שלטל"')
            );
    $fp = fopen('file.csv', 'w');
            //fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
            foreach ($list as $fields) {
                fputcsv($fp, $fields);
            }
     fclose($fp);
?>

Я проверил в Интернете и добавил " fputs ($ fp, $bom = (chr (0xEF). chr (0xBB). chr (0xBF)))", но это не сработало. Кто-нибудь может мне помочь.

Ниже приведен список, который я получаю.

введите описание изображения здесь

Ответ 1

Просто запустил ваш код. Текст правильно закодирован и сгенерирован csv. Открытие CSV в текстовом редакторе, который поддерживает текст на иврите, будет отображаться правильно. Чтобы открыть CSV, содержащий иврит, вам нужно следовать инструкциям, предложенным здесь

Update:

Итак, получается, что MS использует UTF-16, а не только то, что использует UTF-16LE (маленький конец). Чтобы MS CSV открывался правильно, вам нужен кодированный текст UTF-16LE, файл с разделителями табуляции.

$list = array (
            array('שלטל', 'שלטל', 'שלטל', 'שלטל'),
            array('123', '456', '789'),
            array('"שלטל"', '"שלטל"')
        );

$fp = fopen('file.csv', 'w');

//UTF-16LE BOM
fputs($fp, chr(0xFF) . chr(0xFE));

foreach ($list as $fields) {
    $out = '';
    foreach ($fields as $k => $v){
        $fields[$k] = mb_convert_encoding($v, 'UTF-16LE', 'UTF-8');          
    }

    // UTF-16LE tab
    $out = implode(chr(0x09).chr(0x00), $fields);

    // UTF-16LE new line
    fputs($fp, $out.chr(0x0A).chr(0x00));
}
fclose($fp);

Над кодом работает, но не уверен в его эффективности.

Ответ 2

Я думаю, что я столкнулся с этим раньше, а иногда некоторые версии excel просто не показывают правильные символы utf8/fonts. но сам файл уже имеет utf8.

Попробуйте открыть свой csv в Notepad ++ и посмотреть, является ли он utf8-bom, и если он показывает символы utf8