我试图用PHP解析一个csv文件 . 我的问题如下:如果有一个字段用“é”或“í”表示,解析器会从字段的开头吃掉所有这些字符 .
问题仅存在于我的主机上,在本地使用XAAMP时不存在(较新的PHP版本) . 我主机上的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函数吗?
1 回答
您的实际问题是Web服务器在禁止多字节字符集的区域设置下运行 . 如果设置为
C
,我得到相同的结果:在字段中剪切
é
和í
.[0] => e [1] => i [2] => zz
但是,当我像这样运行它:
我得到了正确的结果 .
[0] => ée [1] => íi [2] => zz
您需要调查服务器上可用的语言环境,然后在脚本开头使用
setlocale(LC_ALL, "xy_zz.UTF-8")
.