【问题标题】:php write hebrew / UTF-8 in csvphp 在 csv 中写入希伯来语/UTF-8
【发布时间】:2016-04-28 16:25:28
【问题描述】:

您好,我正在尝试编写一个包含希伯来文文本的 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


    【解决方案1】:

    刚刚运行了您的代码。文本编码正确,生成的 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);
    

    上面的代码有效,但不确定它的效率。

    【讨论】:

    • 但是当我使用 Codeigniter "PHPExcel" 输出是希伯来语而不改变任何设置。所以我需要这样的解决方案。你知道我们不能告诉所有用户按照步骤查看数据!有没有其他办法??
    • @TomPHP 所以在玩了很多之后,我相信我有一个解决方案。更新答案。
    【解决方案2】:

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

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

    【讨论】:

    • 不,它不能与 BOM 一起使用。我已经尝试过了。我也不能坚持所有用户都使用 Nodepad++,因为他们将拥有的默认软件是安装了 ms-excell。所以我正在寻找一个在 msoffice 中打开它的解决方案 ..
    • 无需强制用户使用 npp。我提到了它,所以你可以在使用它时检查它。无论如何,您找到了解决方案!加油!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多