使用希伯来语中的文本在PHP中读取csv文件

时间:2012-08-14 19:38:46

标签: php csv

我想导入我在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");

此解决方案适用于英语,希伯来语,法语,德语字符等。

2 个答案:

答案 0 :(得分:1)

您需要告诉浏览器期望的字符集。将此行添加到显示数据的PHP脚本的顶部:

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

如果您希望文档通过W3C验证,则还需要在文档<meta>的{​​{1}}标记中声明此内容。

您可能还需要处理放在第一行文件中的BOM,我建议在循环之前调用<head>,如果您知道它将始终存在。

此外,您应该首先使用fputcsv()功能生成CSV文件。

答案 1 :(得分: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);
}?>