2016-01-22 49 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