Encodage bloquant pour MySQL

Résolu/Fermé
Goo - 5 oct. 2022 à 09:03
69goo Messages postés 2 Date d'inscription samedi 9 avril 2022 Statut Membre Dernière intervention 15 novembre 2022 - 15 nov. 2022 à 16:48

Bonjour,

Je tente d'importer un fichier .csv Paypal en utf_8 mais il y a un caractère spécial bloquant qui se trouve dans les chiffres supérieurs à 1 000. Il s'agit du fichier brut téléchargé directement sur le site et il faut que je puisse l'importer en BDD comme tel, sans aucun retraitement.

En plus de l'espace entre le 1 et le 0, il y a un Â, que voici : -1Â 263,02

J'ai testé avec utf8_encode(), utf8_decode(), mais aussi avec mysqli_real_escape_string() et rien ne fonctionne.

Une idée pour me dépatouiller ?

Merci !


Windows / Opera 90.0.4480.84

3 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 oct. 2022 à 09:10

Bonjour

Ce symbole, apparait dans les données sources ou après l'import ?

Vu que tu nous dis devoir importer le fichier tel quel sans traitement... si il est dans les données sources... il sera aussi dans la bdd une fois importé.

Et puis tu dis bloquant..  c'est à dire ? Tu as un message d'erreur ? ça refuse de s'importer ?

Tu dis également : En plus de l'espace entre le 1 et le 0, il y a un Â, que voici : -1Â 263,02

Mais 'il n'y a pas de 1 suivi de 0 ...

Sachant que sans voir ton code  ni les éventuels messages d'erreur... impossible de t'en dire plus...


0

Bonjour Jordane45,

Pas de soucis pour tes demandes de précisions.

Ce symbole est dans les données sources.

"si il est dans les données sources... il sera aussi dans la bdd une fois importé." :  quand je dis "importer en BDD comme tel, sans aucun retraitement.", c'est juste que je ne modifie pas le fichier. Bien sûr que pour l'import, il y a un script php et mysql et l'ajout de fonctions, comme écrit dans mon poste. 

Et par bloquant, je veux dire que l'import des lignes dans la BDD se fait bien, jusqu'à la ligne contenant ce caractère. Cette ligne et les suivante ne sont pas importées. Il n'y a pas de message d'erreur.

Et pour la chipoterie (^^) du zéro, il suffit de lire le premier paragraphe ou je parle de "1 000" et qu'ensuite je mets une image. Que ce soit un 0 ou un 2 après l'unité du mille, l'idée reste la même.

Je n'ai certes pas mis de code, mais les fonctions testées. Tu veux voir tous les essais ? avec chacune des fonctions ?

Voici déjà ça pour l'instant

$date = implode('-', array_reverse(explode('/', $getData[0])));
$description = mysqli_real_escape_string($mysqli, $getData[3]);
$montant_brut = str_replace(',', '.', $getData[5]);
$commission = str_replace(',', '.', $getData[6]);
$montant_net = str_replace(',', '.', $getData[7]);
$solde = str_replace(',', '.', $getData[8]);
$nom = $getData[11];
$tva = str_replace(',', '.', $getData[15]);
$frais_livr = str_replace(',', '.', $getData[14]);

$sql = "INSERT INTO " . $_SESSION["table"] . " (date, heure, fuseau, description, devise, montant_brut, commission, montant_net, solde, num_transaction, email, nom, nom_banque, compte_b, frais_livraison, tva, num_facture, num_reference) VALUES ('".$date."','".$getData[1]."','".$getData[2]."','".$description."','".$getData[4]."','".$montant_brut."','".$commission."','".$montant_net."','".$solde."','".$getData[9]."','".$getData[10]."','".$nom."','".$getData[12]."','".$getData[13]."','".$frais_livr."','".$tva."','".$getData[16]."','".$getData[17]."')";
            if(!mysqli_query($mysqli, $sql))
            {
                echo "<script type='text/javascript'>
                alert(\"Erreur INSERT MySQL : " . mysqli_error($mysqli) ."\");
                window.location = \"accounting.php#" . $_SESSION["fis_ref"] . "\"
                </script>";    
            } else {
                echo "<script type=\"text/javascript\">
                alert(\"Importation REUSSIE !\");
                window.location = \"accounting.php#" . $_SESSION["fis_ref"] . "\"
                </script>";
            }
0
69goo Messages postés 2 Date d'inscription samedi 9 avril 2022 Statut Membre Dernière intervention 15 novembre 2022
15 nov. 2022 à 16:48

Ce fut long, mais voici la solution dont la source est ici : 

$montant_brut = str_replace(',', '.', preg_replace('/\s+/u', '', $sheetData[$i][7]));
0