fgetcsv utf8和撇号

时间:2012-12-05 12:17:11

标签: php utf-8 fgetcsv

我使用此代码获得了一个奇怪的行为

        foreach ($files as $key => $error) {  
            if ($error == UPLOAD_ERR_OK) {  

                $name = $_FILES["excelFiles"]["name"][$key];  


                $handle = fopen($_FILES["excelFiles"]["tmp_name"][$key], "r"); 

                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    print_r($data);
                    echo "\r\n";
                }
                fclose($handle);

            }}

事情是,带有撇号的希伯来字符串被剪掉(只是在稀薄的空气中消失)

这是一行结果,例如:

Array
(
    [0] => '
    [1] => אני לא רעבה, תודה
)

1 个答案:

答案 0 :(得分:2)

那是因为fgetcsv期望文件以您当前语言环境使用的任何编码进行编码:

  

注意:

     

此功能会考虑区域设置。如果LANG是例如   en_US.UTF-8,单字节编码的文件由此读错   功能

这也是你的情况。

要解决此问题,您必须执行以下操作之一:

  • 将语言环境设置为与输入文件的编码匹配的语言环境,如果您的平台上有此类语言环境且编码已知
  • 约束输入文件的有效编码,仅使区域设置兼容的编码合法
  • 加载文件并通过将其编码转换为与区域设置匹配的编码进行预处理,然后使用str_getcsv或通过将fgetcsv指向memory stream来读取数据(请参阅php://memoryphp://temp)及其转化数据