1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| // Je spécifie les jeux de caractères que je souhaite détecter
$encodage_list = array('UTF-8', 'ISO-8859-1', 'Latin-1', 'ASCII', 'ISO-8859-15', 'Latin-9', 'Windows-1252', 'CP1252', 'ANSI', 'MacRoman');
mb_detect_order($encodage_list);
// J'affiche les jeux de caractère détectable.
var_dump(mb_detect_order()); // 'ASCII', 'UTF-8' Déjà ce n'est pas norlmale. je devrais retrouver le contenu de $encodage_list
// Je récupère une ligne de mon fichier :
$handle = fopen('Mon/fichier/de/import/fourni/par/un/partenaire/dons/je/ne/connais/pas/le/encodage.csv', "r");
$data = fgetcsv($handle); // Première ligne
$data_line = implode('#SEPARATOR#', $data); // On repasse par une ligne pour le changement d'encodage..
$encodage = mb_detect_encoding($data_line);
var_dump(mb_detect_order()); // La plus part du temps false. Parfois 'ASCII'
// J'encode correctement.
// Mais comme je n'arrive pas à détecter l'encodage cela ne sert à rien.
switch ($encodage)
{
case 'UTF-8':
break;
case 'ISO-8859-1':
case 'Latin-1':
$data_line = utf8_encode($data_line);
break;
case 'ASCII':
$data_line = mb_convert_encoding($data_line, 'UTF-8','ASCII');
//$data_line = iconv('ASCII', 'UTF-8', $data_line);
break;
case 'ISO-8859-15':
case 'Latin-9':
$data_line = iconv('ISO-8859-15', 'UTF-8', $data_line);
break;
case 'Windows-1252':
case 'CP1252':
case 'ANSI':
$data_line = iconv('Windows-1252', 'UTF-8', $data_line);
break;
case 'MacRoman':
$data_line = iconv('MacRoman', 'UTF-8', $data_line);
break;
default:
$data_line = mb_convert_encoding($data_line, 'UTF-8');
} |
Partager