0

我正在尝试用 PHP 解析一个 csv 文件。我的问题如下:如果有一个带有“é”或“í”的字段,解析器会从字段的开头吃掉所有这些字符。

该问题仅存在于我的主机上,在本地使用 XAAMP(较新的 PHP 版本)时不存在。我的主机上存在该 bug 的 PHP 版本是:5.2.6-1+lenny9

代码不过是一行 fgetcsv。

while (($program = fgetcsv($handle, 0, ',', '"')) !== FALSE) {...}

这段代码已经输出了“吃过的”版本,例如当被 print_r 查看时。

有什么我可以做的吗?它一定是PHP中的一个错误,从那时起就已经修复了。我发现的另一种选择是通过在字段末尾放置一个逗号来转义序列(我的 csv 源,如果里面有 , ,Google Spreadsheets 会自动将该字段包装在 " " 中)。然后我可以编写一个函数,如果它是逗号,则删除最后一个字符(对此有任何帮助吗?)。

是(或曾经是)PHP 中的一个已知错误,是否有任何解决方案?如果没有,您能帮我使用 delete-last-character-if-its-a-comma 功能吗?

4

1 回答 1

0

您的实际问题是网络服务器在禁止多字节字符集的语言环境下运行。如果设置为C我得到相同的结果:

<?php print_r(str_getcsv("ée, íi, zz, bb, "));

$   LC_ALL=C   php test_getcsv.php

é领域和í领域 的削减。[0] => e [1] => i [2] => zz

但是当我这样运行它时:

$   LC_ALL=de_DE.UTF-8  php test_getcsv.php

我得到正确的结果。[0] => ée [1] => íi [2] => zz

You will need to investigate which locales are available on your server, then use setlocale(LC_ALL, "xy_zz.UTF-8") at the start of your script.

于 2011-03-29T10:12:18.423 回答