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

heroe

Membre actif
6 Mai 2000
368
18
Paris
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 :
Bloc de code:
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 ;)
 
Bonjour &#224; tous (et bonne ann&#233;e!),
Voil&#224; mon probl&#232;me...

Je bosse actuellement sur un site dont l'affichage des donn&#233;es passe par Flash qui les r&#233;cup&#232;re via XML/PHP/MySQL.

Mon probl&#232;me : quand le texte s'affiche dans Flash, les simples cotes et doubles cotes
sont affich&#233;es en entit&#233;s HTML c'est &#224; dire &quot; et &apos;

J'ai bien essay&#233; avec la fonction html_entity_decode() de PHP mais &#231;a ne marche pas...
si quelqu'un a une id&#233;e... (peut &#234;tre que cela vient de Flash mais je ne suis pas un expert)

Voil&#224; ma configuration serveur :
Apache 2.0
MySQL 4.1.20
PHP 4.3.9

Et voil&#224; le bout de code en question :
Bloc de code:
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 ;)
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...
 
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:
 
j'ai tout chang&#233; pour tout unifier en utf8 (doctype, base de donn&#233;e, XML),
le probl&#232;me est toujours le m&#234;me, sachant que pour les accents &#231;a marche tr&#232;s bien.
Il n'y a que les simples et doubles cotes qui affichent l'entit&#233;e HTML.
Je pense que le probl&#232;me vient de Flash peut &#234;tre...
pfff... j'y ai pass&#233; l'aprem'.
je vais peut &#234;tre sauter par la fen&#234;tre... je suis au RDC :mouais:
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
Bloc de code:
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; !
 
Bloc de code:
Bon... ca ne marche pas.
Je vais chercher une autre solution,
sinon... avec la fonction strtr() de php
mais c'est pas tres propre...
 
oui ou tu peux faire un truc cmme &#231;a dans flash aussi :

Bloc de code:
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 :

Bloc de code:
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 ;)
 
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 ;)
 
Bloc de code:
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 ?
;)
 
oui ou tu peux faire un truc cmme ça dans flash aussi :

Bloc de code:
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 {
		// ç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;","ç");
		pT = strReplace(pT,"&Ccedil;","Ç");
		pT = strReplace(pT,"&quot;","''");
		pT = strReplace(pT,"&amp;","&");

		//etc etc
		
		return pT;
	}
}

euh... il manque pas des accolades quelques part dans ta class, après le if ?
 
euh... il manque pas des accolades quelques part dans ta class, après le if ?
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.
 
if (_global.stringBR == undefined) _global.stringBR = "-br-";
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...
 
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...
oui, c'est de &#231;a que je parlais :p
 
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 :
Bloc de code:
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..." :
Bloc de code:
if (condition) instruction();

3. La version stylée du "si sinon" en une ligne sans grands mots :) :
Bloc de code:
condition ? instructionSI() : instructionSINON() ;
 
enfin de toute façon, j'ai pas trop trouvé de solution "propre" et c'est quand même étrange.
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.