使用fgetcsv将Excel csv导出到php文件中

Tho*_*mas 4 php csv excel

我正在使用excel 2010 professional plus来创建一个excel文件.后来我试图将其导出为UTF-8 .csv文件.我这样做是通过将其保存为CSV(符号分隔..... sry我不知道那里的确切措辞,但我没有英文版本,我担心它的翻译方式不同于1:1).在那里我点击tools-> weboptions并选择unicode(UTF-8)作为编码.示例.csv如下:

ID;englishName;germanName
1;Austria;Österreich
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但如果我现在用我的PHP代码打开文件:

 header('Content-Type: text/html; charset=UTF-8');
 iconv_set_encoding("internal_encoding", "UTF-8");
 iconv_set_encoding("output_encoding", "UTF-8");
 setlocale(LC_ALL, 'de_DE.utf8');
 $fp=fopen($filePathName,'r');
 while (($dataRow= fgetcsv($fp,0,";",'"') )!==FALSE)
 {
     print_r($dataRow);
 }
Run Code Online (Sandbox Code Playgroud)
  • 我得到: sterreich作为屏幕上的结果(因为这是"错误"我切断了结果的所有其他部分).
  • 如果我用notedpad ++打开文件并查看编码,我会看到"ANSI"而不是UTF-8.
  • 如果我将记事本++中的编码更改为UTF8 ....ö,ä,...将被特殊字符替换,我必须手动更正.

如果我去另一条路线并使用notedpad ++创建一个新的UTF-8文件并输入与excel文件相同的数据,当我用php文件打开它时,我会在屏幕上显示"Österreich".

现在我的问题是,为什么它不能与excel一起运行,因此我在这里做错了什么?还是我忽略了什么?

编辑: 由于程序最终将被安装在客户提供的Windows服务器上,因此无需安装其他工具(php库,......),但是必须安装vm-ware或cygwin,......不是).此外,服务器上不会有本地安装的excel(或办公室),因为客户可以通过文件上传对话框上传.csv文件(对话本身不是问题的一部分,因为我知道如何当我创建一个excel文件并在excel在本地安装的testmachine上将其转换为.csv时,我偶然发现了这些以及问题本身.

TNX

Bab*_*aba 11

来自PHP DOC

此功能考虑了区域设置.如果LANG是例如en_US.UTF-8,则此函数读取单字节编码的文件错误.

你可以试试

header('Content-Type: text/html; charset=UTF-8');
$fp = fopen("log.txt", "r");
echo "<pre>";
while ( ($dataRow = fgetcsv($fp, 1000, ";")) !== FALSE ) {
    $dataRow = array_map("utf8_encode", $dataRow);
    print_r($dataRow);
}
Run Code Online (Sandbox Code Playgroud)

产量

Array
(
    [0] => ID
    [1] => englishName
    [2] => germanName
)
Array
(
    [0] => 1
    [1] => Austria
    [2] => Österreich
)
Run Code Online (Sandbox Code Playgroud)