首页 文章

PHP csv解析器在字段的开头吃“é”,“í”等字符

提问于
浏览
0

我试图用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 回答

  • 0

    您的实际问题是Web服务器在禁止多字节字符集的区域设置下运行 . 如果设置为 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

    您需要调查服务器上可用的语言环境,然后在脚本开头使用 setlocale(LC_ALL, "xy_zz.UTF-8") .

相关问题