XPath, XML, BigData – Rationnaliser ces données, manipulation du XML à l’aide SimpleXML


Comme dans le précèdent billet, un autre petit billet sur la recherche d’une solution rapide et peu coûteuse pour récupérer des données éparses afin de les consolider ultérieurement dans une base de données.

En clair, la cible comme aime à dire les consultants : c’est récupérer de gros fichiers de données notamment au format XML, donc passablement structurées, les “découper”, les passer à la moulinette de SimpleXML pour générer des queries et injecter le tout dans une base de données MySQL. Une base sur laquelle, vous pourrez requêter facilement, sortir de KPI, dédoublonner, corriger les corruptions de données… Bref, transformer tel un docteur Frankenstein de la data, des données mortes en données vivantes et exploitables.

Bien évidemment, il y a moyen d’industrialiser, automatiser ce type de manipulation mais volontairement on n’utilise que ce que des outils très usuels. Certes, cela fait un “workflow” un peu chaotique mais qui permet de séquentiellement voir chaque étape

Pour information, nous avons utiliser MAMP pour PHP et MySQL et la console MAC.

1. XML à la Découpe

Vous êtes souvent face à des fichiers imposants en XML, vous aurez donc un sérieux problème à charger le fichier ou les fichiers .xml. Pour contrer, ce problème, vous pouvez indiquer dans votre fichier php que vous allez étendre le paramètre memory_limit

Dans votre fichier php

ini_set("memory_limit","12M");

Dans le php.ini

ini_set("memory_limit","12M");

Par ailleurs, vous pouvez découper préalablement le fichier .xml volumes en fichiers plus petits de taille égales.

Un unique enregistrement de notre fichier xml sample_demo.xml, un row

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
 
  <?xml version=&#x27;1.0&#x27; encoding=&#x27;utf-8&#x27;?>
  <MEMBER_LIST>
  <!-- // some records -->
 
          <row>
        <MEMBER num="1"></MEMBER>
        <CAMPAGNE_ID>TT1114079764</CAMPAGNE_ID>
        <MEMBER_ID>9437858932541</MEMBER_ID>
        <CLIENT_ID>1187635315</CLIENT_ID>
        <EMVHBQ></EMVHBQ>
        <EMVISP></EMVISP>
        <DATEJOIN>12/05/2011</DATEJOIN>
        <DATEUNJOIN></DATEUNJOIN>
        <EMAIL>barack.ndlf@lamaisonblanche.eu</EMAIL>
        <EMVCELLPHONE></EMVCELLPHONE>
        <EMVUNROUTABLE></EMVUNROUTABLE>
        <HBQ_REASON></HBQ_REASON>
        <SMS_DATE_UNJOIN></SMS_DATE_UNJOIN>
        <SMS_EMVHBQ></SMS_EMVHBQ>
        <SMS_HBQ_REASON></SMS_HBQ_REASON>
        <FIRSTNAME>Barack</FIRSTNAME>
        <LASTNAME>N'diang-Le floc'h</LASTNAME>
        <TITLE></TITLE>
        <DATEOFBIRTH></DATEOFBIRTH>
        <ADRESSE></ADRESSE>
        <ANNEE_NAISSANCE></ANNEE_NAISSANCE>
        <CHAMP_DATE_1></CHAMP_DATE_1>
        <CHAMP_DATE_2></CHAMP_DATE_2>
        <CHAMP_DATE_3></CHAMP_DATE_3>
        <CHAMP_DATE_4></CHAMP_DATE_4>
        <CHAMP_DATE_5></CHAMP_DATE_5>
        <CHAMP_NUM_1></CHAMP_NUM_1>
        <CHAMP_NUM_2></CHAMP_NUM_2>
        <CHAMP_NUM_3></CHAMP_NUM_3>
        <CHAMP_NUM_4></CHAMP_NUM_4>
        <CHAMP_NUM_5></CHAMP_NUM_5>
        <CHAMP_TXT_3></CHAMP_TXT_3>
        <CHAMP_TXT_4></CHAMP_TXT_4>
        <CHAMP_TXT_5></CHAMP_TXT_5>
        <CLIENTURN></CLIENTURN>
        <CODE></CODE>
        <CODEPOSTAL></CODEPOSTAL>
        <COUNTRY></COUNTRY>
        <CRENEAU_HORAIRE></CRENEAU_HORAIRE>
        <DATE_ABO_ALERT></DATE_ABO_ALERT>
        <DATE_ABO_AUTOPROMO></DATE_ABO_AUTOPROMO>
        <DATE_ABO_BESTOF_OBS></DATE_ABO_BESTOF_OBS>
        <DATE_ABO_BESTOF_WEEK></DATE_ABO_BESTOF_WEEK>
        <DATE_ABO_BESTOF_W_END></DATE_ABO_BESTOF_W_END>
        <DATE_ABO_NEWS></DATE_ABO_NEWS>
        <DATE_DEMANDE_MODIFICATION_PROF></DATE_DEMANDE_MODIFICATION_PROF>
        <DATE_DESABO_ALERT></DATE_DESABO_ALERT>
        <DATE_DESABO_AUTOPROMO></DATE_DESABO_AUTOPROMO>
        <DATE_DESABO_BESTOF_OBS></DATE_DESABO_BESTOF_OBS>
        <DATE_DESABO_BESTOF_WEEK></DATE_DESABO_BESTOF_WEEK>
        <DATE_DESABO_BESTOF_W_END></DATE_DESABO_BESTOF_W_END>
        <DATE_DESABO_NEWS></DATE_DESABO_NEWS>
        <DATE_ENVOI_PDM></DATE_ENVOI_PDM>
        <DATE_MODIFICATION_PROFIL></DATE_MODIFICATION_PROFIL>
        <DATE_MODIF_NEWS></DATE_MODIF_NEWS>
        <EMAIL_FORMAT></EMAIL_FORMAT>
        <EMAIL_ORIGINE></EMAIL_ORIGINE>
        <EMVADMIN1></EMVADMIN1>
        <EMVADMIN2></EMVADMIN2>
        <EMVADMIN3></EMVADMIN3>
        <EMVADMIN4></EMVADMIN4>
        <EMVADMIN5></EMVADMIN5>
        <EMVDOUBLON></EMVDOUBLON>
        <FAI></FAI>
        <FREQUENCE></FREQUENCE>
        <GENDER></GENDER>
        <HEURE_ENVOI></HEURE_ENVOI>
        <LASTACTIVITY></LASTACTIVITY>
        <LG></LG>
        <LHE></LHE>
        <MESSAGEID_PDM></MESSAGEID_PDM>
        <MOBICLIP></MOBICLIP>
        <NEWS_MENU></NEWS_MENU>
        <OPTINALERT></OPTINALERT>
        <OPTINMONFRANCE></OPTINMONFRANCE>
        <OPTINPARTENAIRES></OPTINPARTENAIRES>
        <OPTIN_ACTU_AFRIQUE>1</OPTIN_ACTU_AFRIQUE>
        <OPTIN_ACTU_MONDE>1</OPTIN_ACTU_MONDE>
        <OPTIN_ACTU_MUSIQUE>False</OPTIN_ACTU_MUSIQUE>
        <OPTIN_AUTOPROMO></OPTIN_AUTOPROMO>
        <OPTIN_BESTOF_OBS></OPTIN_BESTOF_OBS>
        <OPTIN_BESTOF_WEEK></OPTIN_BESTOF_WEEK>
        <OPTIN_BESTOF_W_END></OPTIN_BESTOF_W_END>
        <OPTIN_MFI></OPTIN_MFI>
        <OPTIN_NEWSLETTER5></OPTIN_NEWSLETTER5>
        <OPTIN_NEWSLETTERS></OPTIN_NEWSLETTERS>
        <OPTIN_OFFRE_PARTENAIRE></OPTIN_OFFRE_PARTENAIRE>
        <OPTIN_OFFRE_RFI></OPTIN_OFFRE_RFI>
        <OP_MARKETING></OP_MARKETING>
        <OP_WEBMARKETING></OP_WEBMARKETING>
        <PAYS></PAYS>
        <PROFESSION></PROFESSION>
        <SEED></SEED>
        <SEGMENT></SEGMENT>
        <SOURCE>IHH</SOURCE>
        <SYNCHRO_INSERT></SYNCHRO_INSERT>
        <SYNCHRO_UNJOIN></SYNCHRO_UNJOIN>
        <SYNCHRO_UPDATE></SYNCHRO_UPDATE>
        <TELEPHONE></TELEPHONE>
        <TEMP10_NBMAX></TEMP10_NBMAX>
        <TEMP10_TOPIC></TEMP10_TOPIC>
        <TEMP11_NBMAX></TEMP11_NBMAX>
        <TEMP11_TOPIC></TEMP11_TOPIC>
        <TEMP1_NBMAX></TEMP1_NBMAX>
        <TEMP1_TOPIC></TEMP1_TOPIC>
        <TEMP2_NBMAX></TEMP2_NBMAX>
        <TEMP2_TOPIC></TEMP2_TOPIC>
        <TEMP3_NBMAX></TEMP3_NBMAX>
        <TEMP3_TOPIC></TEMP3_TOPIC>
        <TEMP4_NBMAX></TEMP4_NBMAX>
        <TEMP4_TOPIC></TEMP4_TOPIC>
        <TEMP5_NBMAX></TEMP5_NBMAX>
        <TEMP5_TOPIC></TEMP5_TOPIC>
        <TEMP6_NBMAX></TEMP6_NBMAX>
        <TEMP6_TOPIC></TEMP6_TOPIC>
        <TEMP7_NBMAX></TEMP7_NBMAX>
        <TEMP7_TOPIC></TEMP7_TOPIC>
        <TEMP8_NBMAX></TEMP8_NBMAX>
        <TEMP8_TOPIC></TEMP8_TOPIC>
        <TEMP9_NBMAX></TEMP9_NBMAX>
        <TEMP9_TOPIC></TEMP9_TOPIC>
        <TEMPLATE_TYPE></TEMPLATE_TYPE>
        <UPLOAD_ID></UPLOAD_ID>
        <VILLE></VILLE>
        <ZONE></ZONE>
  </row>
 
  <!-- // some records -->
  </MEMBER_LIST>

On peut donc considérer que notre gros fichier contient 2 190 enregistrements et qu’un enregistrement (row) fait 129 lignes.

Si on souhaite scinder le gros fichier en petits fichiers de taille égale de 500 enregistrements, un rapide calcul nous le donne (282 449x500)/2 190 = 64 500, soit 5 fichiers.

Scinder le gros fichier .xml “quick and dirty”

split -l 103 200 /path_to_file/big_file.xml /path_to_file/destination/small_file_

Ajouter l’extension .xml aux fichiers small_file_aa small_file_ab small_file_ac…etc.

for f in $(find . -type f); do mv $f ${f}.xml; done

Attention, la découpe est faite à la hache, vérifier tout de même de pas scinder au milieu un enregistrement, d’une balise <row>...</row>.

2. Utiliser SimpleXML

SimpleXML est une extension de PHP 5 destinée à simplifier la manipulation des documents XML. Par rapport à DOM ou au parser Expat, SimpleXML peut être utilisé en quelques lignes de code pour lire et extraire des données de fichiers XML, notamment en manipulant les noeuds (nodes) ou les attributs (attributes) de votre fichier .xml.

Nous allons nous servir d’un petit script .php pour se servir de SimpleXML et générer des requêtes d’insertion sql pour charger un fichier .sql qui reprend les données de notre XML bien gras que nous venons d’écarir à l’aide de split.

La base de données et mettre la table

  • Database: fsb_cpg_opened
  • Table: member_list_index_full
  -- --------------------------------------------------------
 
  --
  -- Table structure for table `member_list_index_full`
  --
 
  CREATE TABLE `member_list_index_full` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `campagne_id` text,
    `member_id` text,
    `client_id` text,
    `emvhbq` text,
    `emvisp` text,
    `datejoin` text,
    `dateunjoin` text,
    `email` VARCHAR(255) NOT NULL DEFAULT '',
    `emvcellphone` text,
    `emvunroutable` text,
    `hbq_reason` text,
    `sms_date_unjoin` text,
    `sms_emvhbq` text,
    `sms_hbq_reason` text,
    `firstname` VARCHAR(255) NOT NULL DEFAULT '',
    `lastname` VARCHAR(255) NOT NULL DEFAULT '',
    `title` text,
    `dateofbirth` text,
    `adresse` text,
    `annee_naissance` text,
    `champ_date_1` text,
    `champ_date_2` text,
    `champ_date_3` text,
    `champ_date_4` text,
    `champ_date_5` text,
    `champ_num_1` text,
    `champ_num_2` text,
    `champ_num_3` text,
    `champ_num_4` text,
    `champ_num_5` text,
    `champ_txt_3` text,
    `champ_txt_4` text,
    `champ_txt_5` text,
    `clienturn` text,
    `code` text,
    `codepostal` text,
    `country` text,
    `creneau_horaire` text,
    `date_abo_alert` text,
    `date_abo_autopromo` text,
    `date_abo_bestof_obs` text,
    `date_abo_bestof_week` text,
    `date_abo_bestof_w_end` text,
    `date_abo_news` text,
    `date_demande_modification_prof` text,
    `date_desabo_alert` text,
    `date_desabo_autopromo` text,
    `date_desabo_bestof_obs` text,
    `date_desabo_bestof_week` text,
    `date_desabo_bestof_w_end` text,
    `date_desabo_news` text,
    `date_envoi_pdm` text,
    `date_modification_profil` text,
    `date_modif_news` text,
    `email_format` text,
    `email_origine` text,
    `emvadmin1` text,
    `emvadmin2` text,
    `emvadmin3` text,
    `emvadmin4` text,
    `emvadmin5` text,
    `emvdoublon` text,
    `fai` text,
    `frequence` text,
    `gender` text,
    `heure_envoi` text,
    `lastactivity` text,
    `lg` text,
    `lhe` text,
    `messageid_pdm` text,
    `mobiclip` text,
    `news_menu` text,
    `optinalert` text,
    `optinmonfrance` text,
    `optinpartenaires` text,
    `optin_actu_afrique` text,
    `optin_actu_monde` text,
    `optin_actu_musique` text,
    `optin_autopromo` text,
    `optin_bestof_obs` text,
    `optin_bestof_week` text,
    `optin_bestof_w_end` text,
    `optin_mfi` text,
    `optin_newsletter5` text,
    `optin_newsletters` text,
    `optin_offre_partenaire` text,
    `optin_offre_rfi` text,
    `op_marketing` text,
    `op_webmarketing` text,
    `pays` text,
    `profession` text,
    `seed` text,
    `segment` text,
    `source` text,
    `synchro_insert` text,
    `synchro_unjoin` text,
    `synchro_update` text,
    `telephone` text,
    `temp10_nbmax` text,
    `temp10_topic` text,
    `temp11_nbmax` text,
    `temp11_topic` text,
    `temp1_nbmax` text,
    `temp1_topic` text,
    `temp2_nbmax` text,
    `temp2_topic` text,
    `temp3_nbmax` text,
    `temp3_topic` text,
    `temp4_nbmax` text,
    `temp4_topic` text,
    `temp5_nbmax` text,
    `temp5_topic` text,
    `temp6_nbmax` text,
    `temp6_topic` text,
    `temp7_nbmax` text,
    `temp7_topic` text,
    `temp8_nbmax` text,
    `temp8_topic` text,
    `temp9_nbmax` text,
    `temp9_topic` text,
    `template_type` text,
    `upload_id` text,
    `ville` text,
    `zone` text,
    PRIMARY KEY (`id`),
    FULLTEXT KEY `ind_full_email` (`email`),
    FULLTEXT KEY `ind_full_firstname` (`firstname`),
    FULLTEXT KEY `ind_full_lastname` (`lastname`),
    FULLTEXT KEY `ind_full_ema_fir_las` (`email`,`firstname`,`lastname`)
  ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

3. Générer l’ensemble des requêtes pour injecter le contenu du XML dans la BDD

On va se servir d’un modèle de requête tout bête d’insertion. Faite attention, lorsque vous héritez des données de langue étrangère, le français est à ce titre une langue étrangère, il faut faire une petite “sanitization” de vos données avant des les injecter dans votre requête SQL. Prenons par exemple, une personne fictive dotée d’un nom d’origine bretonne et africaine, nommons-le Barack N'diang-Le floc'h. Cet individu est donc doté d’une double apostrophe, il faut donc protéger avec des addslashes le nom de ce brave homme, ce qui donne N\'diang-Le floc\'h.

fsb_cpg_opened_massive_insert.php

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
  /*  Source : http://www.phpro.org/tutorials/Introduction-To-SimpleXML-With-PHP.html */
 
 
  /*** create a SimpleXML object ***/ 
      if( ! $xml = simplexml_load_file("sample_demo.xml") ) 
      { 
      echo "Unable to load XML file"; 
      } else { 
            $i = 0; 
            /*** loop over the elements ***/ 
            foreach($xml as $node) { 
 
                /* MODEL */
                /*
                <MEMBER num="1"></MEMBER>
                        <CAMPAGNE_ID>TT1114079764</CAMPAGNE_ID>
                        <MEMBER_ID>9437858932541</MEMBER_ID>
                        <CLIENT_ID>1187635315</CLIENT_ID>
                        <EMVHBQ></EMVHBQ>
                        <EMVISP></EMVISP>
                        <DATEJOIN>12/05/2011</DATEJOIN>
                        <DATEUNJOIN></DATEUNJOIN>
                        <EMAIL>barack.ndlf@lamaisonblanche.eu</EMAIL>
                        <EMVCELLPHONE></EMVCELLPHONE>
                        <EMVUNROUTABLE></EMVUNROUTABLE>
                        <HBQ_REASON></HBQ_REASON>
                        <SMS_DATE_UNJOIN></SMS_DATE_UNJOIN>
                        <SMS_EMVHBQ></SMS_EMVHBQ>
                        <SMS_HBQ_REASON></SMS_HBQ_REASON>
                        <FIRSTNAME>Barack</FIRSTNAME>
                        <LASTNAME>N'diang-Le floc'h</LASTNAME>
                        <TITLE></TITLE>
                        ... to be continued
                */
 
                /* VALUES */
                $MEMBER_num = $xml->row[$i]->MEMBER->attributes();
                $CAMPAGNE_ID = $xml->row[$i]->CAMPAGNE_ID;
                $MEMBER_ID = $xml->row[$i]->MEMBER_ID;
                $CLIENT_ID = $xml->row[$i]->CLIENT_ID;
                $EMVHBQ = $xml->row[$i]->EMVHBQ;
                $EMVISP = $xml->row[$i]->EMVISP;
                $DATEJOIN = $xml->row[$i]->DATEJOIN;
                $EMAIL = $xml->row[$i]->EMAIL;
                $EMVCELLPHONE = $xml->row[$i]->EMVCELLPHONE;
                $EMVUNROUTABLE = $xml->row[$i]->EMVUNROUTABLE;
                $HBQ_REASON = $xml->row[$i]->HBQ_REASON;
                $SMS_DATE_UNJOIN = $xml->row[$i]->SMS_DATE_UNJOIN;
                $SMS_EMVHBQ = $xml->row[$i]->SMS_EMVHBQ;
                $SMS_HBQ_REASON = $xml->row[$i]->SMS_HBQ_REASON;
                $FIRSTNAME = $xml->row[$i]->FIRSTNAME;
                $LASTNAME = $xml->row[$i]->LASTNAME;
                $TITLE = $xml->row[$i]->TITLE;
                $DATEOFBIRTH = $xml->row[$i]->DATEOFBIRTH;
                $ADRESSE = $xml->row[$i]->ADRESSE;
                $ANNEE_NAISSANCE = $xml->row[$i]->ANNEE_NAISSANCE;
                $CHAMP_DATE_1 = $xml->row[$i]->CHAMP_DATE_1;
                $CHAMP_DATE_2 = $xml->row[$i]->CHAMP_DATE_2;
                $CHAMP_DATE_3 = $xml->row[$i]->CHAMP_DATE_3;
                $CHAMP_DATE_4 = $xml->row[$i]->CHAMP_DATE_4;
                $CHAMP_DATE_5 = $xml->row[$i]->CHAMP_DATE_5;
                $CHAMP_NUM_1 = $xml->row[$i]->CHAMP_NUM_1;
                $CHAMP_NUM_2 = $xml->row[$i]->CHAMP_NUM_2;
                $CHAMP_NUM_3 = $xml->row[$i]->CHAMP_NUM_3;
                $CHAMP_NUM_4 = $xml->row[$i]->CHAMP_NUM_4;
                $CHAMP_NUM_5 = $xml->row[$i]->CHAMP_NUM_5;
                $CHAMP_TXT_3 = $xml->row[$i]->CHAMP_TXT_3;
                $CHAMP_TXT_4 = $xml->row[$i]->CHAMP_TXT_4;
                $CHAMP_TXT_5 = $xml->row[$i]->CHAMP_TXT_5;
                $CLIENTURN = $xml->row[$i]->CLIENTURN;
                $CODE = $xml->row[$i]->CODE;
                $CODEPOSTAL = $xml->row[$i]->CODEPOSTAL;
                $COUNTRY = $xml->row[$i]->COUNTRY;
                $CRENEAU_HORAIRE = $xml->row[$i]->CRENEAU_HORAIRE;
                $DATE_ABO_ALERT = $xml->row[$i]->DATE_ABO_ALERT;
                $DATE_ABO_AUTOPROMO = $xml->row[$i]->DATE_ABO_AUTOPROMO;
                $DATE_ABO_BESTOF_OBS = $xml->row[$i]->DATE_ABO_BESTOF_OBS;
                $DATE_ABO_BESTOF_WEEK = $xml->row[$i]->DATE_ABO_BESTOF_WEEK;
                $DATE_ABO_BESTOF_W_END = $xml->row[$i]->DATE_ABO_BESTOF_W_END;
                $DATE_ABO_NEWS = $xml->row[$i]->DATE_ABO_NEWS;
                $DATE_DEMANDE_MODIFICATION_PROF = $xml->row[$i]->DATE_DEMANDE_MODIFICATION_PROF;
                $DATE_DESABO_ALERT = $xml->row[$i]->DATE_DESABO_ALERT;
                $DATE_DESABO_AUTOPROMO = $xml->row[$i]->DATE_DESABO_AUTOPROMO;
                $DATE_DESABO_BESTOF_OBS = $xml->row[$i]->DATE_DESABO_BESTOF_OBS;
                $DATE_DESABO_BESTOF_WEEK = $xml->row[$i]->DATE_DESABO_BESTOF_WEEK;
                $DATE_DESABO_BESTOF_W_END = $xml->row[$i]->DATE_DESABO_BESTOF_W_END;
                $DATE_DESABO_NEWS = $xml->row[$i]->DATE_DESABO_NEWS;
                $DATE_ENVOI_PDM = $xml->row[$i]->DATE_ENVOI_PDM;
                $DATE_MODIFICATION_PROFIL = $xml->row[$i]->DATE_MODIFICATION_PROFIL;
                $DATE_MODIF_NEWS = $xml->row[$i]->DATE_MODIF_NEWS;
                $EMAIL_FORMAT = $xml->row[$i]->EMAIL_FORMAT;
                $EMAIL_ORIGINE = $xml->row[$i]->EMAIL_ORIGINE;
                $EMVADMIN1 = $xml->row[$i]->EMVADMIN1;
                $EMVADMIN2 = $xml->row[$i]->EMVADMIN2;
                $EMVADMIN3 = $xml->row[$i]->EMVADMIN3;
                $EMVADMIN4 = $xml->row[$i]->EMVADMIN4;
                $EMVADMIN5 = $xml->row[$i]->EMVADMIN5;
                $EMVDOUBLON = $xml->row[$i]->EMVDOUBLON;
                $FAI = $xml->row[$i]->FAI;
                $FREQUENCE = $xml->row[$i]->FREQUENCE;
                $GENDER = $xml->row[$i]->GENDER;
                $HEURE_ENVOI = $xml->row[$i]->HEURE_ENVOI;
                $LASTACTIVITY = $xml->row[$i]->LASTACTIVITY;
                $LG = $xml->row[$i]->LG;
                $LHE = $xml->row[$i]->LHE;
                $MESSAGEID_PDM = $xml->row[$i]->MESSAGEID_PDM;
                $MOBICLIP = $xml->row[$i]->MOBICLIP;
                $NEWS_MENU = $xml->row[$i]->NEWS_MENU;
                $OPTINALERT = $xml->row[$i]->OPTINALERT;
                $OPTINMONFRANCE = $xml->row[$i]->OPTINMONFRANCE;
                $OPTINPARTENAIRES = $xml->row[$i]->OPTINPARTENAIRES;
                $OPTIN_ACTU_AFRIQUE = $xml->row[$i]->OPTIN_ACTU_AFRIQUE;
                $OPTIN_ACTU_MONDE = $xml->row[$i]->OPTIN_ACTU_MONDE;
                $OPTIN_ACTU_MUSIQUE = $xml->row[$i]->OPTIN_ACTU_MUSIQUE;
                $OPTIN_AUTOPROMO = $xml->row[$i]->OPTIN_AUTOPROMO;
                $OPTIN_BESTOF_OBS = $xml->row[$i]->OPTIN_BESTOF_OBS;
                $OPTIN_BESTOF_WEEK = $xml->row[$i]->OPTIN_BESTOF_WEEK;
                $OPTIN_BESTOF_W_END = $xml->row[$i]->OPTIN_BESTOF_W_END;
                $OPTIN_MFI = $xml->row[$i]->OPTIN_MFI;
                $OPTIN_NEWSLETTER5 = $xml->row[$i]->OPTIN_NEWSLETTER5;
                $OPTIN_NEWSLETTERS = $xml->row[$i]->OPTIN_NEWSLETTERS;
                $OPTIN_OFFRE_PARTENAIRE = $xml->row[$i]->OPTIN_OFFRE_PARTENAIRE;
                $OPTIN_OFFRE_RFI = $xml->row[$i]->OPTIN_OFFRE_RFI;
                $OP_MARKETING = $xml->row[$i]->OP_MARKETING;
                $OP_WEBMARKETING = $xml->row[$i]->OP_WEBMARKETING;
                $PAYS = $xml->row[$i]->PAYS;
                $PROFESSION = $xml->row[$i]->PROFESSION;
                $SEED = $xml->row[$i]->SEED;
                $SEGMENT = $xml->row[$i]->SEGMENT;
                $SOURCE = $xml->row[$i]->SOURCE;
                $SYNCHRO_INSERT = $xml->row[$i]->SYNCHRO_INSERT;
                $SYNCHRO_UNJOIN = $xml->row[$i]->SYNCHRO_UNJOIN;
                $SYNCHRO_UPDATE = $xml->row[$i]->SYNCHRO_UPDATE;
                $TELEPHONE = $xml->row[$i]->TELEPHONE;
                $TEMP10_NBMAX = $xml->row[$i]->TEMP10_NBMAX;
                $TEMP10_TOPIC = $xml->row[$i]->TEMP10_TOPIC;
                $TEMP11_NBMAX = $xml->row[$i]->TEMP11_NBMAX;
                $TEMP11_TOPIC = $xml->row[$i]->TEMP11_TOPIC;
                $TEMP1_NBMAX = $xml->row[$i]->TEMP1_NBMAX;
                $TEMP1_TOPIC = $xml->row[$i]->TEMP1_TOPIC;
                $TEMP2_NBMAX = $xml->row[$i]->TEMP2_NBMAX;
                $TEMP2_TOPIC = $xml->row[$i]->TEMP2_TOPIC;
                $TEMP3_NBMAX = $xml->row[$i]->TEMP3_NBMAX;
                $TEMP3_TOPIC = $xml->row[$i]->TEMP3_TOPIC;
                $TEMP4_NBMAX = $xml->row[$i]->TEMP4_NBMAX;
                $TEMP4_TOPIC = $xml->row[$i]->TEMP4_TOPIC;
                $TEMP5_NBMAX = $xml->row[$i]->TEMP5_NBMAX;
                $TEMP5_TOPIC = $xml->row[$i]->TEMP5_TOPIC;
                $TEMP6_NBMAX = $xml->row[$i]->TEMP6_NBMAX;
                $TEMP6_TOPIC = $xml->row[$i]->TEMP6_TOPIC;
                $TEMP7_NBMAX = $xml->row[$i]->TEMP7_NBMAX;
                $TEMP7_TOPIC = $xml->row[$i]->TEMP7_TOPIC;
                $TEMP8_NBMAX = $xml->row[$i]->TEMP8_NBMAX;
                $TEMP8_TOPIC = $xml->row[$i]->TEMP8_TOPIC;
                $TEMP9_NBMAX = $xml->row[$i]->TEMP9_NBMAX;
                $TEMP9_TOPIC = $xml->row[$i]->TEMP9_TOPIC;
                $TEMPLATE_TYPE = $xml->row[$i]->TEMPLATE_TYPE;
                $UPLOAD_ID = $xml->row[$i]->UPLOAD_ID;
                $VILLE = $xml->row[$i]->VILLE;
                $ZONE = $xml->row[$i]->ZONE;
 
                /* DEBUG */
                // print_r($node); 
 
                /* MODEL QUERY */
 
                /*
                INSERT INTO fsb_cpg_opened.member_list_index_full (id, campagne_id, member_id, client_id, emvhbq, emvisp, datejoin, dateunjoin, email, emvcellphone, emvunroutable, hbq_reason, sms_date_unjoin, sms_emvhbq, sms_hbq_reason, firstname, lastname, title, dateofbirth, adresse, annee_naissance, champ_date_1, champ_date_2, champ_date_3, champ_date_4, champ_date_5, champ_num_1, champ_num_2, champ_num_3, champ_num_4, champ_num_5, champ_txt_3, champ_txt_4, champ_txt_5, clienturn, code, codepostal, country, creneau_horaire, date_abo_alert, date_abo_autopromo, date_abo_bestof_obs, date_abo_bestof_week, date_abo_bestof_w_end, date_abo_news, date_demande_modification_prof, date_desabo_alert, date_desabo_autopromo, date_desabo_bestof_obs, date_desabo_bestof_week, date_desabo_bestof_w_end, date_desabo_news, date_envoi_pdm, date_modification_profil, date_modif_news, email_format, email_origine, emvadmin1, emvadmin2, emvadmin3, emvadmin4, emvadmin5, emvdoublon, fai, frequence, gender, heure_envoi, lastactivity, lg, lhe, messageid_pdm, mobiclip, news_menu, optinalert, optinmonfrance, optinpartenaires, optin_actu_afrique, optin_actu_monde, optin_actu_musique, optin_autopromo, optin_bestof_obs, optin_bestof_week, optin_bestof_w_end, optin_mfi, optin_newsletter5, optin_newsletters, optin_offre_partenaire, optin_offre_rfi, op_marketing, op_webmarketing, pays, profession, seed, segment, source, synchro_insert, synchro_unjoin, synchro_update, telephone, temp10_nbmax, temp10_topic, temp11_nbmax, temp11_topic, temp1_nbmax, temp1_topic, temp2_nbmax, temp2_topic, temp3_nbmax, temp3_topic, temp4_nbmax, temp4_topic, temp5_nbmax, temp5_topic, temp6_nbmax, temp6_topic, temp7_nbmax, temp7_topic, temp8_nbmax, temp8_topic, temp9_nbmax, temp9_topic, template_type, upload_id, ville, zone) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
                */
 
                echo ('INSERT INTO fsb_cpg_opened.member_list_index_full (id, campagne_id, member_id, client_id, emvhbq, emvisp, datejoin, dateunjoin, email, emvcellphone, emvunroutable, hbq_reason, sms_date_unjoin, sms_emvhbq, sms_hbq_reason, firstname, lastname, title, dateofbirth, adresse, annee_naissance, champ_date_1, champ_date_2, champ_date_3, champ_date_4, champ_date_5, champ_num_1, champ_num_2, champ_num_3, champ_num_4, champ_num_5, champ_txt_3, champ_txt_4, champ_txt_5, clienturn, code, codepostal, country, creneau_horaire, date_abo_alert, date_abo_autopromo, date_abo_bestof_obs, date_abo_bestof_week, date_abo_bestof_w_end, date_abo_news, date_demande_modification_prof, date_desabo_alert, date_desabo_autopromo, date_desabo_bestof_obs, date_desabo_bestof_week, date_desabo_bestof_w_end, date_desabo_news, date_envoi_pdm, date_modification_profil, date_modif_news, email_format, email_origine, emvadmin1, emvadmin2, emvadmin3, emvadmin4, emvadmin5, emvdoublon, fai, frequence, gender, heure_envoi, lastactivity, lg, lhe, messageid_pdm, mobiclip, news_menu, optinalert, optinmonfrance, optinpartenaires, optin_actu_afrique, optin_actu_monde, optin_actu_musique, optin_autopromo, optin_bestof_obs, optin_bestof_week, optin_bestof_w_end, optin_mfi, optin_newsletter5, optin_newsletters, optin_offre_partenaire, optin_offre_rfi, op_marketing, op_webmarketing, pays, profession, seed, segment, source, synchro_insert, synchro_unjoin, synchro_update, telephone, temp10_nbmax, temp10_topic, temp11_nbmax, temp11_topic, temp1_nbmax, temp1_topic, temp2_nbmax, temp2_topic, temp3_nbmax, temp3_topic, temp4_nbmax, temp4_topic, temp5_nbmax, temp5_topic, temp6_nbmax, temp6_topic, temp7_nbmax, temp7_topic, temp8_nbmax, temp8_topic, temp9_nbmax, temp9_topic, template_type, upload_id, ville, zone) VALUES');
 
                echo ('(NULL,');                  
                echo ('\''.$MEMBER_num.'\',');
                echo ('\''.$CAMPAGNE_ID.'\',');
                echo ('\''.$MEMBER_ID.'\',');
                echo ('\''.$CLIENT_ID.'\',');
                echo ('\''.$EMVHBQ.'\',');
                echo ('\''.$EMVISP.'\',');
                echo ('\''.$DATEJOIN.'\',');
                echo ('\''.$EMAIL.'\',');
                echo ('\''.$EMVCELLPHONE.'\',');
                echo ('\''.$EMVUNROUTABLE.'\',');
                echo ('\''.$HBQ_REASON.'\',');
                echo ('\''.$SMS_DATE_UNJOIN.'\',');
                echo ('\''.$SMS_EMVHBQ.'\',');
                echo ('\''.$SMS_HBQ_REASON.'\',');
                echo ('\''.addslashes($FIRSTNAME).'\',');
                echo ('\''.addslashes($LASTNAME).'\',');
                echo ('\''.$TITLE.'\',');
                echo ('\''.$DATEOFBIRTH.'\',');
                echo ('\''.$ADRESSE.'\',');
                echo ('\''.$ANNEE_NAISSANCE.'\',');
                echo ('\''.$CHAMP_DATE_1.'\',');
                echo ('\''.$CHAMP_DATE_2.'\',');
                echo ('\''.$CHAMP_DATE_3.'\',');
                echo ('\''.$CHAMP_DATE_4.'\',');
                echo ('\''.$CHAMP_DATE_5.'\',');
                echo ('\''.$CHAMP_NUM_1.'\',');
                echo ('\''.$CHAMP_NUM_2.'\',');
                echo ('\''.$CHAMP_NUM_3.'\',');
                echo ('\''.$CHAMP_NUM_4.'\',');
                echo ('\''.$CHAMP_NUM_5.'\',');
                echo ('\''.$CHAMP_TXT_3.'\',');
                echo ('\''.$CHAMP_TXT_4.'\',');
                echo ('\''.$CHAMP_TXT_5.'\',');
                echo ('\''.$CLIENTURN.'\',');
                echo ('\''.$CODE.'\',');
                echo ('\''.$CODEPOSTAL.'\',');
                echo ('\''.$COUNTRY.'\',');
                echo ('\''.$CRENEAU_HORAIRE.'\',');
                echo ('\''.$DATE_ABO_ALERT.'\',');
                echo ('\''.$DATE_ABO_AUTOPROMO.'\',');
                echo ('\''.$DATE_ABO_BESTOF_OBS.'\',');
                echo ('\''.$DATE_ABO_BESTOF_WEEK.'\',');
                echo ('\''.$DATE_ABO_BESTOF_W_END.'\',');
                echo ('\''.$DATE_ABO_NEWS.'\',');
                echo ('\''.$DATE_DEMANDE_MODIFICATION_PROF.'\',');
                echo ('\''.$DATE_DESABO_ALERT.'\',');
                echo ('\''.$DATE_DESABO_AUTOPROMO.'\',');
                echo ('\''.$DATE_DESABO_BESTOF_OBS.'\',');
                echo ('\''.$DATE_DESABO_BESTOF_WEEK.'\',');
                echo ('\''.$DATE_DESABO_BESTOF_W_END.'\',');
                echo ('\''.$DATE_DESABO_NEWS.'\',');
                echo ('\''.$DATE_ENVOI_PDM.'\',');
                echo ('\''.$DATE_MODIFICATION_PROFIL.'\',');
                echo ('\''.$DATE_MODIF_NEWS.'\',');
                echo ('\''.$EMAIL_FORMAT.'\',');
                echo ('\''.$EMAIL_ORIGINE.'\',');
                echo ('\''.$EMVADMIN1.'\',');
                echo ('\''.$EMVADMIN2.'\',');
                echo ('\''.$EMVADMIN3.'\',');
                echo ('\''.$EMVADMIN4.'\',');
                echo ('\''.$EMVADMIN5.'\',');
                echo ('\''.$EMVDOUBLON.'\',');
                echo ('\''.$FAI.'\',');
                echo ('\''.$FREQUENCE.'\',');
                echo ('\''.$GENDER.'\',');
                echo ('\''.$HEURE_ENVOI.'\',');
                echo ('\''.$LASTACTIVITY.'\',');
                echo ('\''.$LG.'\',');
                echo ('\''.$LHE.'\',');
                echo ('\''.$MESSAGEID_PDM.'\',');
                echo ('\''.$MOBICLIP.'\',');
                echo ('\''.$NEWS_MENU.'\',');
                echo ('\''.$OPTINALERT.'\',');
                echo ('\''.$OPTINMONFRANCE.'\',');
                echo ('\''.$OPTINPARTENAIRES.'\',');
                echo ('\''.$OPTIN_ACTU_AFRIQUE.'\',');
                echo ('\''.$OPTIN_ACTU_MONDE.'\',');
                echo ('\''.$OPTIN_ACTU_MUSIQUE.'\',');
                echo ('\''.$OPTIN_AUTOPROMO.'\',');
                echo ('\''.$OPTIN_BESTOF_OBS.'\',');
                echo ('\''.$OPTIN_BESTOF_WEEK.'\',');
                echo ('\''.$OPTIN_BESTOF_W_END.'\',');
                echo ('\''.$OPTIN_MFI.'\',');
                echo ('\''.$OPTIN_NEWSLETTER5.'\',');
                echo ('\''.$OPTIN_NEWSLETTERS.'\',');
                echo ('\''.$OPTIN_OFFRE_PARTENAIRE.'\',');
                echo ('\''.$OPTIN_OFFRE_RFI.'\',');
                echo ('\''.$OP_MARKETING.'\',');
                echo ('\''.$OP_WEBMARKETING.'\',');
                echo ('\''.$PAYS.'\',');
                echo ('\''.$PROFESSION.'\',');
                echo ('\''.$SEED.'\',');
                echo ('\''.$SEGMENT.'\',');
                echo ('\''.$SOURCE.'\',');
                echo ('\''.$SYNCHRO_INSERT.'\',');
                echo ('\''.$SYNCHRO_UNJOIN.'\',');
                echo ('\''.$SYNCHRO_UPDATE.'\',');
                echo ('\''.$TELEPHONE.'\',');
                echo ('\''.$TEMP10_NBMAX.'\',');
                echo ('\''.$TEMP10_TOPIC.'\',');
                echo ('\''.$TEMP11_NBMAX.'\',');
                echo ('\''.$TEMP11_TOPIC.'\',');
                echo ('\''.$TEMP1_NBMAX.'\',');
                echo ('\''.$TEMP1_TOPIC.'\',');
                echo ('\''.$TEMP2_NBMAX.'\',');
                echo ('\''.$TEMP2_TOPIC.'\',');
                echo ('\''.$TEMP3_NBMAX.'\',');
                echo ('\''.$TEMP3_TOPIC.'\',');
                echo ('\''.$TEMP4_NBMAX.'\',');
                echo ('\''.$TEMP4_TOPIC.'\',');
                echo ('\''.$TEMP5_NBMAX.'\',');
                echo ('\''.$TEMP5_TOPIC.'\',');
                echo ('\''.$TEMP6_NBMAX.'\',');
                echo ('\''.$TEMP6_TOPIC.'\',');
                echo ('\''.$TEMP7_NBMAX.'\',');
                echo ('\''.$TEMP7_TOPIC.'\',');
                echo ('\''.$TEMP8_NBMAX.'\',');
                echo ('\''.$TEMP8_TOPIC.'\',');
                echo ('\''.$TEMP9_NBMAX.'\',');
                echo ('\''.$TEMP9_TOPIC.'\',');
                echo ('\''.$TEMPLATE_TYPE.'\',');
                echo ('\''.$UPLOAD_ID.'\',');
                echo ('\''.$VILLE.'\',');
 
                /* end */
 
                echo ('\''.$ZONE.'\'');
                /* very end*/
                echo (');');
 
 
                echo "\n\n";
                $i++;
            } 
 
      }// EOI
  INSERT INTO fsb_cpg_opened.member_list_index_full (id, campagne_id, member_id, client_id, emvhbq, emvisp, datejoin, dateunjoin, email, emvcellphone, emvunroutable, hbq_reason, sms_date_unjoin, sms_emvhbq, sms_hbq_reason, firstname, lastname, title, dateofbirth, adresse, annee_naissance, champ_date_1, champ_date_2, champ_date_3, champ_date_4, champ_date_5, champ_num_1, champ_num_2, champ_num_3, champ_num_4, champ_num_5, champ_txt_3, champ_txt_4, champ_txt_5, clienturn, code, codepostal, country, creneau_horaire, date_abo_alert, date_abo_autopromo, date_abo_bestof_obs, date_abo_bestof_week, date_abo_bestof_w_end, date_abo_news, date_demande_modification_prof, date_desabo_alert, date_desabo_autopromo, date_desabo_bestof_obs, date_desabo_bestof_week, date_desabo_bestof_w_end, date_desabo_news, date_envoi_pdm, date_modification_profil, date_modif_news, email_format, email_origine, emvadmin1, emvadmin2, emvadmin3, emvadmin4, emvadmin5, emvdoublon, fai, frequence, gender, heure_envoi, lastactivity, lg, lhe, messageid_pdm, mobiclip, news_menu, optinalert, optinmonfrance, optinpartenaires, optin_actu_afrique, optin_actu_monde, optin_actu_musique, optin_autopromo, optin_bestof_obs, optin_bestof_week, optin_bestof_w_end, optin_mfi, optin_newsletter5, optin_newsletters, optin_offre_partenaire, optin_offre_rfi, op_marketing, op_webmarketing, pays, profession, seed, segment, SOURCE, synchro_insert, synchro_unjoin, synchro_update, telephone, temp10_nbmax, temp10_topic, temp11_nbmax, temp11_topic, temp1_nbmax, temp1_topic, temp2_nbmax, temp2_topic, temp3_nbmax, temp3_topic, temp4_nbmax, temp4_topic, temp5_nbmax, temp5_topic, temp6_nbmax, temp6_topic, temp7_nbmax, temp7_topic, temp8_nbmax, temp8_topic, temp9_nbmax, temp9_topic, template_type, upload_id, ville, zone) VALUES(NULL,'1','TT1114079764','9437858932541','1187635315','','','12/05/2011','barack.ndlf@lamaisonblanche.eu','','','','','','','Barack','N\'diang-Le floc\'h','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','1','1','False','','','','','','','','','','','','','','','','IHH','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');

4. Injecter le contenu et nettoyer la BDD des corruptions liées au caractère encoding

Bon disons que vous êtes parvenu(e) à créer votre requête et à l’injecter.

  -- se connecter à MySQL
  /Applications/MAMP/Library/bin/mysql -u root -p
 
  -- Utiliser à la BDD
  USE rfi_cpg_opened;
 
  -- Vider la table "aucazou"
  TRUNCATE TABLE member_list_index_full;
 
  -- Injecter le fichier .sql
  SOURCE /path_to_your_sql_file/insert_full_from_xml.sql;

Vous pouvez désormais nettoyer les problèmes liés au mauvais encodage des caractères : pays, title, firstname, lastname, profession.

  • Exemple simple de nettoyage du champ pays
      UPDATE `member_list_index_full` SET `pays` = REPLACE(`pays` ,'è','è');
  • Exemple plus avancé de nettoyage du champ ville
    --- nettoyage du champ ville
    UPDATE `member_list_index_full` SET ville = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ville,'&uuml;','ü'),'&ocirc;','ô'),'&oacute;','ó'),'&ecirc;','ê'),'&agrave;','à'),'&atilde;','ã'),'&Uuml;','Ü'),'&Ocirc;','Ô'),'&Oacute;','Ó'),'&Ecirc;','Ê'),'&Agrave;','À'),'&Atilde;','Ã'),'&Ccedil;','Ç'),'&Uacute;','Ú'),'&Otilde;','Õ'),'&Iacute;','Í'),'&Iacute;','Í'),'&Eacute;','É'),'&Acirc;','Â'),'&Aacute;','Á'),'&ccedil;','ç'),'&uacute;','ú'),'&otilde;','õ'),'&iacute;','í'),'&eacute;','é'),'&acirc;','â'),'&aacute;','á'),'&atilde;','ã'),'&ccedil;','ç'),'à ','à'),'à ','à'),'º','º'),'ª','ª'),'ç','ç'),'–','–'),'ó','ó'),'é','é'),'á','á'),'ê','ê'),'ã','ã'),'â','â'),'í','í'),'õ','õ'),'Ø','Ø'),'•','-'),'ú','ú'),'à ','À'),'Ã','Ã'),'Ç','Ç'),'â€','"'),'“','"'),'É','É');

Conclusion : Il est certain que c’est un peu fastidieux comme procédure mais c’est parfois un mal nécessaire pour pouvoir exploiter des données trop longtemps endormies.

En savoir plus