Ce forum est en partie financé par l’affichage de publicités. Merci de désactiver votre bloqueur de publicités pour nous permettre de continuer à fournir ce service.

Pb d'affichage des entités HTML avec Flash/XML/PHP

Discussion dans 'Développement web' créé par heroe, 7 Janvier 2007.

Modérateurs: Nephou
  1. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    Bonjour à tous (et bonne année!),
    Voilà mon problème...

    Je bosse actuellement sur un site dont l'affichage des données passe par Flash qui les récupère via XML/PHP/MySQL.

    Mon problème : quand le texte s'affiche dans Flash, les simples cotes et doubles cotes
    sont affichées en entités HTML c'est à dire " et '

    J'ai bien essayé avec la fonction html_entity_decode() de PHP mais ça ne marche pas...
    si quelqu'un a une idée... (peut être que cela vient de Flash mais je ne suis pas un expert)

    Voilà ma configuration serveur :
    Apache 2.0
    MySQL 4.1.20
    PHP 4.3.9

    Et voilà le bout de code en question :
    Code (Text):
    require_once("../tools/lib.php");

    $bdd=link("toto");
    $req="SELECT * FROM news ORDE BY dateIns DESC";
    $res=mysql_query($req,$bdd) or die (mysql_error());
    $xml="<?xml version=\"1.0\" encoding=\"utf_8\" ?>
    <liste version=\"1\" xmlns=\"http://xspf.org/ns/0/\">";
     
      while ($ligne = mysql_fetch_object($res)) {
           
            $date=utf8_encode(stripslashes($ligne->date));
            $titre=utf8_encode(stripslashes($ligne->titre));
            $news=utf8_encode(stripslashes($ligne->news));
           
     $xml .= "<news>
                <date>$date</date>
                <titre>$titre</titre>
                <texte>$news</texte>
            </news>";
           
            }
       
    $xml .= "</liste>";
       
    echo $xml;
    Merci d'avance ;)
     
  2. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    je pense que c'est parce que tu utf8_encode, du coup les & sont tranform&#233; en & utf-8 et les entit&#233;s html ne sont plus reconnues.
    Si tu utilise utf-8, pas besoin d'encoder tes caract&#232;res (si tu d&#233;clare bien que ta page est en utf-8 en tout cas) ;-)


    Sinon tu d&#233;clare xmlns="http://xspf.org/ns/0/" alors que &#231;a n'a aucun rapport avec ce que contient ton fichier xml...

    xspf (pronomcer "spiff") c'est pour faire des playlist, pas pour des news...
     
  3. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    j'ai tout changé pour tout unifier en utf8 (doctype, base de donnée, XML),
    le problème est toujours le même, sachant que pour les accents ça marche très bien.
    Il n'y a que les simples et doubles cotes qui affichent l'entitée HTML.
    Je pense que le problème vient de Flash peut être...
    pfff... j'y ai passé l'aprem'.
    je vais peut être sauter par la fenêtre... je suis au RDC :mouais:
     
  4. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    ah mais attend !!

    Je veins de voir un truc, tu &#224; des donn&#233;es html dans ton xml, il faut les mettre entre <![CDATA[ et ]]>

    donc ton truc &#231;a devrait &#234;tre
    Code (Text):
    require_once("../tools/lib.php");

    $bdd=link("toto");
    $req="SELECT * FROM news ORDE BY dateIns DESC";
    $res=mysql_query($req,$bdd) or die (mysql_error());
    $xml="<?xml version=\"1.0\" encoding=\"utf_8\" ?>
    <liste version=\"1\" xmlns=\"http://xspf.org/ns/0/\">";
     
      while ($ligne = mysql_fetch_object($res)) {
           
            $date=stripslashes($ligne->date);
            $titre=stripslashes($ligne->titre);
            $news=stripslashes($ligne->news);
           
     $xml .= "<news>
                <date>$date</date>
                <titre><![CDATA[$titre]]></titre>
                <texte><![CDATA[$news]]></texte>
            </news>";
           
            }
       
    $xml .= "</liste>";
       
    echo $xml;
    essaye avec &#231;a :)


    P.S. : avant de sauter par la fen&#234;tre prend les cl&#233; on sais jamais si un coup de vent refermait la fen&#234;tre et que la porte d'entr&#233;e soit verrouill&#233; !
     
  5. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    Code (Text):
     
    Bon... ca ne marche pas.
    Je vais chercher une autre solution,
    sinon... avec la fonction strtr() de php
    mais c'est pas tres propre...
     
  6. obi wan

    obi wan Membre d’élite
    Club MacG

    Inscrit:
    19 Mars 2003
    Messages:
    1 628
    J'aime reçus:
    86
    oui ou tu peux faire un truc cmme &#231;a dans flash aussi :

    Code (Text):


    class Conversions {
       
        public static function strReplace(str:String,s:String,r:String):String {
            return str.split(s).join(r);
        }

        public static function txtHtmlEnFlash(_s:String):String {
            // &#231;a c'est pour les BR...
            if (_global.stringBR == undefined) _global.stringBR = "-br-";
            var pT:String = strReplace(_s,_global.stringBR,"\n");
           
            pT = strReplace(pT,"&ccedil;","&#231;");
            pT = strReplace(pT,"&Ccedil;","&#199;");
            pT = strReplace(pT,"&quot;","''");
            pT = strReplace(pT,"&amp;","&");

            //etc etc
           
            return pT;
        }
    }

     

    apr&#232;s tu n'as plus qu'&#224; appeler la fonction sur tes chaines avant l'affichage :

    Code (Text):

    this.monTexte = Conversions.txtHtmlEnFlash(this.monTexte);
     
    Mais c'est pas tr&#232;s propre non plus... ceci dit vu la rapidit&#233; de traitement pour de telles op&#233;raions, franchement, c'est pas bien m&#233;chant.

    Sinon tu peux aussi mettre la propri&#233;t&#233; html de tes champs textes sur 'true' dans flash avec une police "embed" dont tu dois configurer la liaison dans la biblioth&#232;que. M&#234;me les css fonctionnent (pas tout quand m&#234;me) ! M&#234;me l'appel de fonction flash depuis des liens html affich&#233;s dans un champ texte flash fonctionne ;)
     
  7. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    Merci je vais essayer avec ça.
    J'avais essayé avec le php avec la fonction strtr(),
    mais ça me remplacer les quotes par des '?'.
    Je vais essayer avec ta class.

    Merci ;)
     
  8. fredmac75

    fredmac75 Membre d’élite
    Club MacG

    Inscrit:
    14 Juillet 2003
    Messages:
    1 415
    J'aime reçus:
    127
    Code (Text):
    require_once("../tools/lib.php");

    $bdd=link("toto");
    $req="SELECT * FROM news ORDE BY dateIns DESC";
    $res=mysql_query($req,$bdd) or die (mysql_error());
    $xml="<?xml version=\"1.0\" encoding=\"utf_8\" ?>
    <liste version=\"1\" xmlns=\"http://xspf.org/ns/0/\">";
     
      while ($ligne = mysql_fetch_object($res)) {
           
            $date=utf8_encode(stripslashes($ligne->date));
            $titre=utf8_encode(stripslashes($ligne->titre));
            $news=utf8_encode(stripslashes($ligne->news));
           
     $xml .= "<news>
                <date>$date</date>
                <titre>$titre</titre>
                <texte>$news</texte>
            </news>";
           
            }
       
    $xml .= "</liste>";
       
    echo $xml;
    Juste comme ça en passant... dans ta requête SQL ne faudrait-il pas écrire ORDER en lieu et place de ORDE ?
    ;)
     
  9. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    oops...
    ça c'est juste une erreur de copiage/collage de mon code... :D
     
  10. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    euh... il manque pas des accolades quelques part dans ta class, après le if ?
     
  11. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    je ne connais pas ActionScript (c'est bien &#231;a ?), mais c'ets pareil partout... :rateau:

    Apr&#232;s un if tu dois avoir un bloc (syntaxe du C, reprise par &#224; peu pr&#232;s tout les langage :p).

    un bloc, c'est soit instruction;, soit { instruction1; instruction2; ... } et parfois d'autre encore dnas certains langage.

    Donc je pense qu'il n'y a pas d'erreur dans le code que obi wan t'as donn&#233;. :)
    Sauf si Action Script ne supporte pas &#231;a.
     
  12. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    c'etait ça qui me faisait bizarre...

    enfin de toute façon, j'ai pas trop trouvé de solution "propre" et c'est quand même étrange.
    J'utilise strtr pour remplacer les quotes par des apostrophes.
    ça marche mais bon...
     
  13. p4bl0

    p4bl0 Membre d’élite
    Club MacG

    Inscrit:
    12 Juillet 2004
    Messages:
    4 772
    J'aime reçus:
    425
    oui, c'est de &#231;a que je parlais :p
     
  14. heroe

    heroe Membre confirmé

    Inscrit:
    6 Mai 2000
    Messages:
    368
    J'aime reçus:
    18
    bein je savais pas ça tiens... :rolleyes:
    je dormirais moins con... quoi que...
     
  15. obi wan

    obi wan Membre d’élite
    Club MacG

    Inscrit:
    19 Mars 2003
    Messages:
    1 628
    J'aime reçus:
    86
    Non il n'y a pas d'erreur dans mon code, mis à part que j'ai oublié d'enlever cette ligne qui relève plus de mon framework perso que de ce que je voulais montrer ici ;)
    En effet j'utilise un caractère spécial pour les BR donc ils sont gérés un peu à part.


    En ce qui concerne la syntaxe, il y a 3 façon de faire des boucles IF en flash :

    1. La version qui prend de la place :
    Code (Text):

    if (condition) {
        //les instructions
    } else if (autre condition) {
        //les instructions
    } else {
        //et si vraiment on peut rien faire d'autre...
    }
     
    2. La version "mmm là j'ai pas besoin de else et je veux une seule instruction donc on va tout faire sur une ligne..." :
    Code (Text):

    if (condition) instruction();
     
    3. La version stylée du "si sinon" en une ligne sans grands mots :) :
    Code (Text):

    condition ? instructionSI() : instructionSINON() ;
     
     
  16. obi wan

    obi wan Membre d’élite
    Club MacG

    Inscrit:
    19 Mars 2003
    Messages:
    1 628
    J'aime reçus:
    86
    Ben moi depuis le temps que je fais du flash, je te jure que l'étrange ne me surprend plus ;) pas plus tard qu'il y a une semaine il m'a encore fait quelque chose de totalement incroyable, à s'arracher les cheveux que je n'ai pas sur mon code.
     
Modérateurs: Nephou
Chargement...