1

我对这段代码有一个奇怪的行为

        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] => אני לא רעבה, תודה
)
4

1 回答 1

2

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

笔记:

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

这也是您的情况。

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

  • 将语言环境设置为与输入文件的编码匹配的语言环境,如果您的平台上有这样的语言环境并且编码是已知的
  • 约束输入文件的有效编码,只使与语言环境兼容的编码合法
  • 加载文件并通过将其编码转换为与区域设置匹配的编码对其进行预处理,然后使用str_getcsv或通过指向带有转换后数据fgetcsv内存流(请参阅php://memory和)读取数据php://temp
于 2012-12-05T12:21:56.550 回答