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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$exifCmdN = $exifCmd." ".$image_path;
$writeOK = fwrite($fp, $exifCmdN) !== FALSE;
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
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;
	}
}
J'ai sur B forcé le utf8_encode ds le fwrite*. J'ai alors en sortie par ex ceci d'exporté:
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
La 1ere ligne représente A, la 2nd B.
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?