Bonjour,
Je travail actuellement sur un projet (dans le cadre de mes études) qui m'a été confié durant mon stage. Je devais créer un système d'informations pour lycée avec d'un coté une partie cliente en flash/CS4 et d'un autre coté, une partie Serveur apache, MySQL.
J'ai donc créer une interface d'administration intranet ou j'entre et modifie des informations. Depuis cette interface d'administration je peux lancer mon programme flash (dans le navigateur). Ce dernier ce connecte via AMFPHP à ma base de donnée par l'intermédiaire de PHP.
Mon problème est simple, mais je ne trouve pas la solution : Les informations que j'entre dans ma base de donnée sont toutes encodées en UTF-8 et d'ailleurs mes entête de page web sont déclarées en UTF-8, et je les visualisent correctement. Par contre lorsque je visualise ces même informations avec flash et bien les accents se transforment en caractères bizarres etc... Seul les caractères "standards" sont affichés correctement.
Un autre fait bizarre : Le fichier qui contient la classe de liaison entre PHP et Flash (le service utilisé par AMFPHP) doit être encodé en UTF-8 sans Bom, sinon mon application flash ne parvient pas à lire le fichier XML que j'envoie en flux...
Voila quelques morceaux de codes commentés :
Voici comment j'entre des données dans la base de donnée :
1 2 3 4 5 6 7 8 9
| // Si on a au moins un titre, un type d'info et un texte
if (isset($_POST['titre']) && isset($_POST['info_saisie']))
{
$titreInfo = utf8_encode(addslashes($_POST['titre']));
$infoSaisie = utf8_encode(addslashes($_POST['info_saisie']));
$date = addslashes($_POST['date']);
// Du code de traitement
$req = "INSERT INTO informations VALUES('', '" . $rang . "', '" . $date . "', '" . $_SESSION['login'] . "', '" . $titreInfo . "', '" . $infoSaisie . "', '" .$image . "', '" . $video . "', '" . $typeInformation . "')";
mysql_query($req) or die(mysql_error()); |
Et voici comment j'affiche les informations dans la page de visualisation (php)
<?php echo nl2br(utf8_decode(stripslashes($retour['message']))); ?>
Et jusqu'a la, tout ce passe bien, les informations issues de la base de données sont bien affichées. Par contre lorsque je passe tout ca sur flash c'est autre chose... voyez la suite :
Cette fonction envoi un fichier XML en flux a mon application flash :
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
| function informationsToXML()
{
mysql_connect ("localhost", "####", "######");
mysql_select_db ("infolyc");
$compterInformations = mysql_query("SELECT COUNT(*) as taille FROM informations") or die(mysql_error());
$nombreInformations = mysql_fetch_array($compterInformations);
$taille = $nombreInformations['taille'];
$XMLAbs = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
$XMLInfo .= "<informations>\r\n";
$XMLInfo .= "\t<nombre>" . $taille . "</nombre>\r\n";
if ($_SESSION['droits'] == 1) // BVS
$reqInformations = mysql_query("SELECT * FROM informations WHERE type='1' ORDER BY rang DESC") or die(mysql_error());
else
$reqInformations = mysql_query("SELECT * FROM informations ORDER BY rang DESC") or die(mysql_error());
while ($informations = mysql_fetch_array($reqInformations))
{
$titre = utf8_decode(stripslashes($informations['titre']));
$date = date('d/m', $informations['date']);
$message = utf8_decode(stripslashes($informations['message']));
$htmlBr = array ("<br />", "\r\n");
$message = str_replace($htmlBr, "\n", $message);
$image = stripslashes($informations['image']);
$video = stripslashes($informations['video']);
$XMLInfo .= "\t<info>\r\n";
$XMLInfo .= "\t\t<titre>" . $titre . "</titre>\r\n";
$XMLInfo .= "\t\t<date>" . $date . "</date>\r\n";
$XMLInfo .= "\t\t<information>" . $message . "</information>\r\n";
$XMLInfo .= "\t\t<image>" . $image . "</image>\r\n";
$XMLInfo .= "\t\t<video>" . $video . "</video>\r\n";
$XMLInfo .= "\t</info>\r\n";
}
$XMLInfo .= "</informations>";
mysql_close();
return $XMLInfo;
} |
Dans flash j'utilise AMFPHP comme expliqué dans la tutoriel sur AS3 disponible sur le site (qui au passage est un fantastique ouvrage).
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
| function connexionServeur() : void {
// Remplacer localhost par l'IP du serveur
// connexion.connect("172.16.0.3/infolyc/infolyc/echange/gateway.php");
connexion.connect("http://localhost/infolyc/infolyc/echange/gateway.php");
connexionInfo.connect("http://localhost/infolyc/infolyc/echange/gateway.php");
// Du code de traitement
// L'objet connexion appel les methodes de la class Echanges
// Cette classe PHP utilise le framework AMFPHP
connexion.call ("Echanges.absencesToXML", retourServeurAbsence);
connexionInfo.call ("Echanges.informationsToXML", retourServeurInformation);
}
// Récupère les informations et les transmets au parseur
function succesInfo(e:*) : void {
XMLInfo = new XML(e);
XMLInfo.ignoreWhitespace = true;
parseInformations(XMLInfo);
}
// Parseur de données informations
function parseInformations(donnee:XML) : void {
nombreInfo = new Number(donnee.nombre);
titre = new Array(nombreInfo);
date = new Array(nombreInfo);
information = new Array(nombreInfo);
image = new Array(nombreInfo);
video = new Array(nombreInfo);
// On rempli les tableau avec les données du fichier XML
for (var i:Number = 0 ; i < nombreInfo ; i++) {
titre[i] = new String(donnee.info.titre.text()[i]);
date[i] = new String(donnee.info.date.text()[i]);
information[i] = new String(donnee.info.information.text()[i]);
image[i] = new String(donnee.info.image.text()[i]);
video[i] = new String(donnee.info.video.text()[i]);
}
} |
C'est lourd à lire et c'est pour çela que j'ai bien pris le temps de vous expliquer les étapes. J'espère que vous pourrez m'aider car je but complètement.
Merci pour votre patience
Partager