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

问题描述 投票:0回答:3

您好,我正在尝试编写一个包含希伯来语文本的 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) ))”,但没有成功。有人能帮我吗。

以下是我得到的输出。

php codeigniter csv hebrew
3个回答
3
投票

刚刚运行了你的代码。文本编码正确,生成的 csv 有效。在支持希伯来语文本的文本编辑器中打开 CSV 将正确显示。要打开包含希伯来语的 CSV,您需要按照建议的说明进行操作此处

更新:

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

上面的代码可以工作,但不确定其效率。


0
投票

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

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


0
投票

试试这个:

$data = "שם פרטי,שם משפחה,עיר\na,b,c\n1,2,3";           // need to use  " for \n
file_put_contents("myexcel.csv","\xEF\xBB\xBF");      // BOM with UTF-8 to csv
file_put_contents("myexcel.csv",$data,FILE_APPEND);   // add more data

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.