php在csv中写希伯来语/ UTF-8

时间:2016-01-22 06:36:15

标签: php codeigniter csv hebrew

您好我正在尝试编写带有HEBREW文本的CSV。它写了一些符号而不是希伯来文。下面是我的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)))”但它没有成功。有人能帮我吗。

以下是我得到的输出。

enter image description here

2 个答案:

答案 0 :(得分:3)

只需运行您的代码。文本已正确编码并生成csv有效。在支持希伯来语文本的文本编辑器中打开CSV将正确显示。要打开包含希伯来语的CSV,您需要按照建议here

的说明进行操作

<强>更新

事实证明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);

以上代码有效,但不确定其效率。

答案 1 :(得分:0)

我想我之前遇到过这种情况,有时某些版本的excel并没有显示正确的utf8字符/字体。但文件本身已经有了utf8。

尝试将你的csv打开到Notepad ++中,看看它是否是utf8-bom以及它是否显示utf8字符