Bonsoir,
j'ai un souci pour déterminer le header d'un fichier CSV.

Début du fichier CSV (édité avec Notepad++) :
"SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",""HFMCODE"",""CURRENTLYACTIVE"",""ACTIVATEDATE"",""DEACTIVATEDATE"",""GROUPNAME"",""OFFICECOUNTRY"",""FIRSTNAME"",""LASTNAME"",""COMPANYNAME"",
""JOBCODE"",""REPORTINGENTITY"",""BUSINESSUNITNAME"",""LOCATION"",""INTERNETADDRESS"",""MANAGERFIRSTNAME"",""MANAGERLASTNAME"",""MANAGEREMAIL""";
"SESA1000,""(none)"",""Software Engineering"",""SESA84441"",""Atlassian"",""JIRA Global Instance"","""",""True"",""Jan 01, 2021"","""","""",""Spain"",""Miguel"",""Abad"",""SCHNEIDER ELECTRIC ESPANA, S.A.U."",""FKP8"","""",""Global Finance"",""BARCELONA (BAC DE RODA)"",""adresse.mail@se.com"",""Alistair"",""Mckelvie"",""manager.adresse.mail@se.com""";
traitement pour obtenir le header :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        rewind(self::$handle);//pointer au début du fichier
        if (false !== $line = fgets(self::$handle,4096)) {
 
            $line = preg_replace('~^\N{U+FEFF}~u', '', $line); //retirer le BOM
 
            $char = mb_substr($line, 0, 1); // premier caractère
            if ($char == '"')  {
                $line = rtrim($line);
                $line = substr($line,1, -1);
                $line = str_replace('""', '"', $line);
                $line = str_replace('"""', '"', $line);
 
                $separator = ",";
            }
            else
                $separator = ";";
 
            $enclosure = '"';
 
            $header = str_getcsv($line, $separator, $enclosure);
        }

Ligne lue avant le traitement (vue en debug pas à pas avec PHPSTORM) :
"SESAID,""ALTERNATEIDS"",""PLATFORM"",""PLATFORMOWNER"",""PUBLISHER"",""APPLICATIONNAME"",""HFMCODE"",""CURRENTLYACTIVE"",""ACTIVATEDATE"",""DEACTIVATEDATE"",""GROUPNAME"",""OFFICECOUNTRY"",""FIRSTNAME"",""LASTNAME"",""COMPANYNAME"",
""JOBCODE"",""REPORTINGENTITY"",""BUSINESSUNITNAME"",""LOCATION"",""INTERNETADDRESS"",""MANAGERFIRSTNAME"",""MANAGERLASTNAME"",""MANAGEREMAIL""";\r\n
Ligne après le traitement :
SESAID,"ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE","CURRENTLYACTIVE","ACTIVATEDATE","DEACTIVATEDATE","GROUPNAME","OFFICECOUNTRY","FIRSTNAME","LASTNAME","COMPANYNAME","JOBCODE","REPORTINGENTITY",
"BUSINESSUNITNAME","LOCATION","INTERNETADDRESS","MANAGERFIRSTNAME","MANAGERLASTNAME","MANAGEREMAIL"""
On voit que les lignes 8, 9 et 10 ont bien joué leur rôle, sauf au niveau du dernier élément de la ligne : ""MANAGEREMAIL""".

Après le code des ligne 8 et 9, on a ""MANAGEREMAIL""" ce qui semble correct : le \r\n a été supprimé par la ligne 8 et le point-virgule a été supprimé par la ligne 9.

Par contre après l'exécution des lignes 10 et 11, on a "MANAGEREMAIL""". Donc la ligne 10 a bien remplacé le "" par " partout sauf à la fin de la ligne mais n'a pas touché au """ alors que j'aurais compris si on avait eu "" mais en admettant que ça ne se fasse pas, la ligne 11 aurait bien du remplacer """ par " . Que nenni. Comment faire , SVP ?