1

PHP で作成したヘブライ語のテキストを含む CSV ファイルをインポートしたいと考えています。

これは私がファイルを作成した方法です:

header("Content-Type: application/comma-separated-values; charset=UTF-16LE");
header("Content-Disposition: attachment; filename=\"$fileName\"");

res = "";
foreach($data as $row) {
     foreach($row as $coll) {
          $res .= $coll . "\t";
     }

     $res .= "\r\n";
}

// Convert $res from UTF8 to UTF-16LE and add special chars at the beginning
echo chr(255) . chr(254) . mb_convert_encoding($res, 'UTF-16LE', 'UTF-8'); 

そのコードは機能し、ヘブライ文字が正しく表示された CSV ファイルを取得します。

同じファイルを読み取ろうとすると、ヘブライ文字がうまく表示されません (たとえば、ÔÒàÔ âÜ ÔÒÕã 0)。これは私が試したコードです:

$fp = fopen($file_full_path,'r') or die("can't open file");
print "<table>\n";
while($csv_line = fgetcsv($fp)) {
     print '<tr>';
     for ($i = 0, $j = count($csv_line); $i < $j; $i++) 
     {
         $val = $csv_line[$i];
         print '<td>'.$val.'</td>';
     }
     print "</tr>\n";
}

print '</table>\n';
fclose($fp) or die("can't close file");

このソリューションは、英語、ヘブライ語、フランス語、ドイツ語などの文字で機能するはずです。

4

2 に答える 2

1

基本的に、文字列をutf-8に変換するには、次を使用する必要があります

iconv(mb_detect_encoding($data[$c], mb_detect_order(), true), "UTF-8", $data[$c])

ここにutf-8 csvファイルを読み取るための完全な機能があります

<?php
$row = 1;
if (($handle = fopen("mycsv.csv", "r")) !== FALSE) {
while (($data =  fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo iconv(mb_detect_encoding($data[$c], mb_detect_order(), true), "UTF-8", $data[$c]) . "<br />\n";
    }
}
fclose($handle);
}?>
于 2013-06-17T13:04:34.927 に答える
0

期待する文字セットをブラウザに伝える必要があります。データを表示している PHP スクリプトの先頭に次の行を追加します。

header("Content-Type: text/html; charset=UTF-16LE");

<meta>ドキュメントが W3C 検証に合格するようにするには、ドキュメントの のタグでこれを宣言する必要もあり<head>ます。

ファイルの最初の行に配置した BOM を処理する必要がある場合もありますfseek($fp, 2);。ループが常に存在することがわかっている場合は、ループの前に呼び出すことをお勧めします。

また、fputcsv()関数を使用して、最初に CSV ファイルを生成する必要があります。

于 2012-08-14T19:47:10.900 に答える