Je suis en train de me prendre la tête sur un pb d encoding UTF-8.
Je génère un fichier txt qui doit être en utf-8 à partir d une classe php (et des donnés mysql).
mbstring est actif sur php 5.2
D'un côté (A), j exporte les données pour tagger des fichiers référencés dans ma base. De l autre (B), je veux exporter les même données pour tagger des fichiers que je liste à partir d un répertoire et dont les fichiers sont enregistrés dans une array().
Dans le cas A, l'export des données fonctionne correctement en utf-8.
Si j'active B, mon fichier txt n est plus utf8.
le coeur du code pour A est
Pour B, dans la même méthode, je veux exporter quasiment la meme ligne, sauf que le chemin vers le fichier diffère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $exifCmdN = $exifCmd." ".$image_path; $writeOK = fwrite($fp, $exifCmdN) !== FALSE;
J'ai sur B forcé le utf8_encode ds le fwrite*. J'ai alors en sortie par ex ceci d'exporté:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 if (array_key_exists($key, $this->original_pict_array)) { $src_image_path = realpath($this->original_pict_array[$key]); if (file_exists($src_image_path)) { $exifCmdN2 = $exifCmd." ".$src_image_path.$this->eol; $writeOK = fwrite($fp, utf8_encode($exifCmdN2)) !== FALSE; } }
La 1ere ligne représente A, la 2nd B.exiftool -IPTC:CodedCharacterSet=UTF8 -IPTC:Headline="cathédrale" E:\localhost\piwigo-2.0.2\galleries\Autriche\Salzburg\72_cathedrale_int.jpg
exiftool -IPTC:CodedCharacterSet=UTF8 -IPTC:Headline="cathédrale" E:\CD-Photos\2002-2007_DVD1-5\DVD1_copy\Autriche_2002_Ascension (9-12 mai)\72_cathedrale_int.jpg
D'où vient mon pb? Comme vous voyez ds le code, exifCmdN et exifCmdN2 sont quasi identiques, mais générent une string différente (exifCmdN reste en utf-8 alors que exifCmdN2 passe en iso8859). Pourquoi?
Une piste d explication est la clef $key de mon array qui est qque part décodée puis réencodée en utf-8, mais je ne vois pas en quoi cela peut influer le reste, puisque j'utilise realpath pour le chemin et la même base $exifCmd ds les 2 cas (ds l exemple, $exifCmd vaut << exiftool -IPTC:CodedCharacterSet=UTF8 -IPTC:Headline="cathédrale" >>)
*mes tests confirment ce qui est annoncé ici. Le utf8_encode doit être ds le fwrite, si il est avant, cela ne fonctionne pas!
Si je l'omet, le fichier complet est en ansi au lieu d etre utf8 (et avec des é partout).
Et puis cette page référence les fonctions à risque. C'est quoi ce langage où les fonctions de bases de gestion des strings peuvent endommager les dites strings?
Partager