Bonjour,

J'utilise Spip + une contrib pour jouer des MP3. Jusqu'à présent, tout se passait très bien : l'animation jouait les morceaux joints à un article et affichait leurs titres.

Dans sa nouvelle version, Spip passe enfin à utf-8. Très bien. Le malheur, c'est qu'alors l'anim' Flash ne lit plus bien les titres des morceaux.
Exemple

Je vais refaire ici le schéma de la contrib en tâchant d'être simple.

1) dans la page que l'internaute consulte, il y a ceci. J'ai laissé quelques références directes à Spip pour plus de simplicité ; la boucle va chercher les adresses et les titres des morceaux enregistrés par le rédacteur. Ce qui nous intéresse, c'est le PHP :

<object type="application/x-shockwave-flash" data="mp3player.swf" width="280" height="280" bgcolor="#ffffff">
  <param name="movie" value="mp3player.swf" />
  <param name="bgcolor" value="#ffffff" />
</object>

<!-- Construction du fichier xml contenant liste des mp3 associe a l article -->
<?php $chemin1 = "mp3player.xml";
$fp = fopen ($chemin1, "w+");
$fp2="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<player showDisplay=\"yes\" showPlaylist=\"yes\" autoStart=\"yes\">\n"; ?>
<BOUCLE_mp3(DOCUMENTS) {id_article} {mode=document} {par titre}>

<?php $urlDocPlayer='[(#URL_DOCUMENT|texte_script)]';
$titreDocPlayer='[(#TITRE|supprimer_numero|no_accent|texte_script)]';
$DescriptifDocPlayer='[- (#DESCRIPTIF|no_accent|texte_script)]';
$typeDocPlayer='[(#TYPE_DOCUMENT|texte_script)]';
if ($titreDocPlayer=="") $titreDocPlayer=$typeDocPlayer;
if ($typeDocPlayer=="MP3")
   $fp2.="  <song path=\"$urlDocPlayer\" title=\"$titreDocPlayer $DescriptifDocPlayer\" />\n";
?>

</BOUCLE_mp3>

<?php 
$fp2.="</player>";
$fp3 = fwrite ($fp, $fp2);
$p3 = fclose ($fp); 
?>


2) et puis il y a 2 autres fichiers :
- mp3player.xml, vide par défaut et dont le contenu est remplacé à chaque utilisation du player par un internaute
- mp3player.php, qui contient le code suivant :

<?php
function readFileIntoBuffer( $filename ) 
{	@$fp = fopen( $filename, "r"); 
	if ( $fp ) 
	{	$val = fread( $fp, filesize( $filename )); 
		fclose( $fp ); 
		return $val; 
	} 
	return false; 
} 
$liste=readFileIntoBuffer('mp3player.xml'); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-cache, ");
echo "$liste"; 
?>


Ma mission (et je l'accepte) est d'afficher correctement ces caractères. j'ai déjà fait pas mal de recherches à ce sujet, notamment :
- j'ai encodé mes fichiers en utf-8 sans BOM
- j'ai tenté les fonctions utf8_encode() et utf8_decode() sans succès

J'ai beaucoup lu et fait pas mal d'essais sans que cela corrige le problème.
Et en plus je ne peux pas toucher au .fla, dont je ne dispose pas...
J'ai oublié une chose relativement importante : dans la contrib, tous les titres sont traités avec le filtre no_accent, c'est-à-dire la fonction suivante :


<?

function no_accent($chaine){ 
   $chaine = strtr
// La ligne suivante entre parenthèse doit être sur une seule ligne, sinon erreur php
($chaine,  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
 $chaine = str_replace("\"", "&quot;", $chaine);
 return $chaine;
  }

?>

Modifié par olivier-m (12 Sep 2006 - 17:38)
j'ai eu le meme souci recement avec tout autre chose que spip mais toujours avec un player mp3 flash et un xml que je cree moi meme.

pour les caracteres accentuées, pas de pb mais cela me rajouté des carrés a la place de ...

le seule solution que j'ai trouvé a été de remettre ma bdd en latin au lieu de utf8