Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Excel导出CSV时的编码问题_Php_Silex - Fatal编程技术网

Php 从Excel导出CSV时的编码问题

Php 从Excel导出CSV时的编码问题,php,silex,Php,Silex,Microsoft Excel CSV导出存在编码问题。我创建了一个导入方法,它读取一个包含联系人的CSV文件,将联系人推送到我们的数据库中 这是我的流程 当我从Microsoft Excel中另存为以创建包含unicode字符(如è)的CSV文件时,我已生成了CSV文件 当我通过邮递员上传它,然后用fread、file或file\u get\u contents读取临时文件的内容时,我有一些坏字符 当我使用LibreOffice()时,一切都很好,我的PHP代码中包含了良好的编码 我尽我所能尝

Microsoft Excel CSV导出存在编码问题。我创建了一个导入方法,它读取一个包含联系人的CSV文件,将联系人推送到我们的数据库中

这是我的流程

  • 当我从Microsoft Excel中
    另存为
    以创建包含unicode字符(如
    è
    )的CSV文件时,我已生成了CSV文件

  • 当我通过邮递员上传它,然后用
    fread
    file
    file\u get\u contents
    读取临时文件的内容时,我有一些坏字符

  • 当我使用LibreOffice()时,一切都很好,我的PHP代码中包含了良好的编码

    我尽我所能尝试了许多解决方案,如
    mb\u convert\u encoding
    utf8\u encode
    iconv
    ,但都不起作用

    这就是我从垃圾堆里得到的

    这是我的代码,它将文件的内容转换为数组,并在行上迭代,以便将行转换为数组

    $iterableContacts = Closure::bind(function () use ($filePath) {
        $keys = [
            'email',
            'language',
            'lastname',
            'firstname',
            'organization',
            'job',
            'street',
            'street_complement',
            'zipcode',
            'city',
            'country',
            'note'
        ];
    
        // var_dump(file($filePath));
    
        foreach (file($filePath, FILE_SKIP_EMPTY_LINES|FILE_IGNORE_NEW_LINES) as $key => $line) {
            $line = str_getcsv($line, ';');
    
            if (trim(strtolower($line[0])) == 'email') {
                continue;
            } elseif (count($line) === count($keys) && !empty($line)) {
                yield ($key - 1) => array_combine($keys, array_values($line));
            }
        }
    }, null);
    
    mb\u detect\u encoding
    返回我
    ASCII

    有人能帮我吗

    Microsoft Excel 2016 build 15.26(160910)
    PHP 5.6.28-1

    当您执行var_dump()时,在哪里显示它?我通过预览响应将它显示给POSTMAN。请注意,在预览响应中从LibreOffice调试我的CSV正确地显示了我的内容为什么您应该关心一些编码猜测者检测到的内容?使用您选择的编码保存文件,并使用相同的编码读取文件。如果丢失了保存文件的编码,则会丢失数据。那么,您告诉Excel在编写文件时使用哪种编码?(大概您会选择一个字符集来支持您可能使用的所有字符。)我们的客户使用Excel和其他一些软件来管理他们自己的联系人。我们使用UTF-8编码将他们的联系人导出到CSV中,但当他们通过Excel打开并保存联系人时,即使他们在Excel中设置UTF-8编码,上传时也会丢失编码:/Excel过度简化了打开CSV文件的过程。创建新工作簿,使用文本文件中的数据»获取外部数据»,并回答文本导入向导中的问题,而不是“打开”。要保存,请使用“另存为”»另存为类型为CSV UTF-8….的文件…。(它用UTF-8 BOM作为文本的前缀。尝试测试BOM是否有助于Excel的“打开”。)