2016-01-22 46 views
10

嗨我想写一个CSV与HEBREW文本在它。它会写一些符号而不是希伯来文。以下是我的PHP代码。php写希伯来文/ UTF-8在csv

<?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

回答

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); 

上面的代码工作,虽然不知道它的效率。

+0

但是当我使用笨“PHPExcel”输出来在希伯来语中不更改任何设置。所以我需要这种解决方案。您知道我们无法告诉所有用户按照步骤查看数据!有没有其他方法? – TomPHP

+0

@TomPHP所以在玩了很多游戏后,我相信我有一个解决方案。更新答案。 – mani

0

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

尝试打开您的CSV到记事本++,看看它是否是UTF8-BOM,如果它显示UTF8字符

+0

nope它不与BOM工作..我已经尝试过..此外,我不能坚持所有用户用户Nodepad ++,因为他们将具有的默认软件是ms-excell安装..所以我正在寻找一个解决方案,以在msoffice中打开它。 – TomPHP

+1

不需要坚持用户使用npp。我提到过,所以你可以使用它检查一次。无论如何,你找到了解决方案!去的路! – fedmich