Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DÉCODER DES CODES HTML PARMIS D'AUTRES ! (AS2)


Information sur la source

Catégorie :ActionScripts Classé sous : chaine, as2, remplacement, html Niveau : Initié Date de création : 15/07/2007 Date de mise à jour : 15/07/2007 03:49:30 Vu / téléchargé: 5 347 / 213

Note :
Aucune note

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Imaginons que nous ayons un texte (issu d'un xml par exemple) contenant des balises html du style <b> et </b> et des codes de ce genre : &apos pour l'apostrophe et : & pour le l'ampersand.
Si nous décodions avec la fonction (flash my_text.html=true) nous perdrions ceux que nous désirons gérer comme les <b> et </b> !!


 

Source

  • Voici un fonction qui décode les (mots) de votre choix en lui passant en paramètre le nom du champ texte sur lesquel procéder.
  • Champ texte en effet, puisqu'en AS2 nous n'avons à disposition que l'instruction "ReplaceText".
  • - Concernant la recherche d'occurences et son remplacement en AS3, je vous renvoie ici :
  • http://livedocs.adobe.com/flash/9.0_fr/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts_bak&file=00000084.html
  • this.createTextField("my_txt2", this.getNextHighestDepth(), 8, 150, 320, 22);
  • my_txt2.autoSize = true;
  • my_txt2.text = "&apos;|à|&apos;|â|&apos;|€|,<b>machin</b>,|%|&|";
  • Decode_carrets(my_txt2);
  • my_txt.text = "&apos;|à|&apos;|â|&apos;|€|,<b>machin</b>,|%|&|";
  • Decode_carrets(my_txt);
  • //------------------------------------------------------------------------------------
  • function Decode_carrets(chaine){
  • //Tableau contenant le code à rechercher et celui qui sera son remplaçant.
  • var Tab_code = new Array ( ["&apos;", "'"],
  • ["&" , "&"],
  • [",<" , "<"],
  • [">," , ">"]
  • );
  • for(i=0; i<Tab_code.length; i++){//recherche avec tous les codes un par un
  • var masq : String = new String(Tab_code[i][0]);
  • var replace : String = new String(Tab_code[i][1]);
  • var len_masq : Number = Tab_code[i][0].length;
  • var pos_deb : Number = chaine.text.indexOf(masq);
  • while (pos_deb >-1){ //recherche du même code sur la ligne entière
  • chaine.replaceText(pos_deb, pos_deb+len_masq, replace);
  • var pos_deb : Number = chaine.text.indexOf(masq);
  • }//while
  • }//for
  • }
  • //------------------------------------------------------------------------------------
Voici un fonction qui décode les (mots) de votre choix en lui passant en paramètre le nom du champ texte sur lesquel procéder.
Champ texte en effet, puisqu'en AS2 nous n'avons à disposition que l'instruction "ReplaceText".

- Concernant la recherche d'occurences et son remplacement en AS3, je vous renvoie ici : 

http://livedocs.adobe.com/flash/9.0_fr/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts_bak&file=00000084.html


this.createTextField("my_txt2", this.getNextHighestDepth(), 8, 150, 320, 22);
my_txt2.autoSize = true;
my_txt2.text = "&apos;|à|&apos;|â|&apos;|€|,<b>machin</b>,|%|&|";
Decode_carrets(my_txt2);

my_txt.text = "&apos;|à|&apos;|â|&apos;|€|,<b>machin</b>,|%|&|";

Decode_carrets(my_txt);

//------------------------------------------------------------------------------------
function Decode_carrets(chaine){

//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_code  = new Array ( ["&apos;",  "'"], 
							["&" ,  "&"],
							[",<"    ,  "<"],
							[">,"    ,  ">"]
						  );
for(i=0; i<Tab_code.length; i++){//recherche avec tous les codes un par un
                                 var masq     : String = new String(Tab_code[i][0]); 
                                 var replace  : String = new String(Tab_code[i][1]);
                                 var len_masq : Number = Tab_code[i][0].length;
	                             var pos_deb  : Number = chaine.text.indexOf(masq);
while (pos_deb >-1){ //recherche du même code sur la ligne entière
		            chaine.replaceText(pos_deb, pos_deb+len_masq, replace);  	
                    var pos_deb : Number  = chaine.text.indexOf(masq);
                   }//while
                                }//for
								
}
//------------------------------------------------------------------------------------

Conclusion

-----------------------------------------------------
|-- !! ATTENTION !! source compilée avec Flash 9 ---|
-----------------------------------------------------

Voir le fla pour la démo.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • replace_txt.flaTélécharger ce fichier [Réservé aux membres club]25 088 octets

Télécharger le zip

Historique

15 juillet 2007 03:49:31 :
Coorection du code

Commentaires et avis

signaler à un administrateur
Commentaire de pegase31 le 15/07/2007 11:10:22

une petite astuce qui a déjà été donnée ici pour remplacer une chaîne dans un string (ici myText) et qui tient en une seule ligne :

myText.split("chaîne à remplacer").joint("chaîne de remplacement");

Peg'

signaler à un administrateur
Commentaire de Loubiou le 16/07/2007 01:52:15

Ok bien, mais bon, "chaine.replaceText(pos_deb, pos_deb+len_masq, replace);"   ça fait une ligne aussi non ?
Notons que j'utilise une seule commande flash "REPLACETEXT" au lieu de "SPLIT" et "JOIN" pour votre ligne de code qui oblige plus de cycle machine je pense.

Bref, c'est preque la même chose mais pas tout à fait ;-))

signaler à un administrateur
Commentaire de pegase31 le 16/07/2007 12:37:27

sauf que ma méthode remplace tout les textes dans la lignes d'une seule façon sans paramétres à ajouter, no index à trouver auparavant.
Tu places ce bout de code dans un for en ayant inscrit ton tableau avant et pas besoin de While, ni de toute la tonne de code avant.

Ce qui donnerait :

# //Tableau contenant le code à rechercher et celui qui sera son remplaçant.
# var Tab_code = new Array ( ["&apos;", "'"],
# ["&" , "&"],
# [",<" , "<"],
# [">," , ">"]
# );
# for (var i=0; i<Tab_code.length; i++) {
# myText.split(Tab_code[i][0]).join(Tab_code[i][1]);
# }

voili, rien de plus simple ! Et sèrieusement c'est pas du tout pareil ...

Peg'

signaler à un administrateur
Commentaire de shubenka le 16/07/2007 15:52:04

Pour améliorer la méthode il faudrais ne faire qu'un parcours du texte pour toutes les règles de remplacement. Contrairement à N parcours de texte pour N règles. Je dit pas que cela serais facile à faire mais ça serais mieux :p

signaler à un administrateur
Commentaire de Loubiou le 16/07/2007 19:36:44

Je viens de tester ton code : je ne l'avait pas fait avant faisant confiance !
Le résultat est flagrant !
- En effet, j'ai le regret de t'informer que ton code ne décode qu'une seule occurence de la phrase à tester (après modifs puisqu'il ne peut que travailler sur des chaînes et non sur directement sur un champ texte comme le mien).

Mon code recherche dans la phrase toutes les occurences et les remplacent à la volée puis refait cette opération pour tous les mots à chercher dans la phrase. D'où le WHILE (pour toute la phrase) et le FOR pour tous les mots à chercher.

En conclusion, je pense qu'avant de parler, il faut analyser la problèmatique et ensuite étudier le code donné en réponse. (je l'applique à moi-même !). Je pensais que mon code était assez explicite ! cela prouve qu'il faut que je donne plus de commentaires à mes codes à l'avenir (même en classe expert). Mon prof me disait que les maths, ce n'était pas de la cuisine (lol).

Pour démonstration j'ai comparé nos 2 codes:

Nb: ton code ne décode rien tel qu'il est, (tu ne l'a pas testé je pense !).
Il faut passer par un chaine pour qu'il fonctionne.
//-----------------------------------------------------------------------
// Ton code :

this.createTextField("myText", this.getNextHighestDepth(), 8, 150, 320, 22);
myText.autoSize = true;
//myText.text = "&apos;|à|&apos;|â|&apos;|€|,<b>machin</b>,|%|&|";

// phrase de départ à décoder :
myText.text="aazerty,<lm>,&apos;&apos;azerty&apos;";

chaine = myText.text;
trace(chaine);
//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_code = new Array ( ["&apos;", "1"],
                            ["azer" ,  "2"],
                            [",<",     "3"],
                            [">," ,    "4"]
                          );
for (var i=0; i<Tab_code.length; i++) {
//ma ligne de code proposée par pegase31 :
chaine2 = chaine.split(Tab_code[i][0]).join(Tab_code[i][1]);

}
  trace(chaine2);
// résultat : 1 seul mot décodé (>,) !!!!!!
//donne : aazerty,<lm4&apos;&apos;azerty&apos;

//---------------------------------------------------------------
// mon code :

this.createTextField("my_text", this.getNextHighestDepth(), 8, 150, 320, 22);
my_text.autoSize = true;
// phrase de départ à décoder :
my_text.text = "aazerty,<lm>,&apos;&apos;azerty&apos;";

Decode_carrets(my_text);

//------------------------------------------------------------------------------------
function Decode_carrets(champ_texte){

//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_codes = new Array ( ["&apos;", "1"],
                            ["azer" ,  "2"],
                            [",<",     "3"],
                            [">," ,    "4"]
                          );
for(i=0; i<Tab_codes.length; i++){//recherche avec tous les codes un par un
                                 var masq     : String = new String(Tab_codes[i][0]);
                                 var replace  : String = new String(Tab_codes[i][1]);
                                 var len_masq : Number = Tab_codes[i][0].length;
                             var pos_deb  : Number = champ_texte.text.indexOf(masq);
while (pos_deb >-1){ //recherche du même code sur la ligne entière
            champ_texte.replaceText(pos_deb, pos_deb+len_masq, replace);  
                    var pos_deb : Number  = champ_texte.text.indexOf(masq);
                   }//while
                                }//for
// Résultat tout a été décodé :
//donne : a2ty3lm4112ty1
}
//------------------------------------------------------------------------------------

En conclusion, rien n'est acquis en prog ... !






signaler à un administrateur
Commentaire de pegase31 le 16/07/2007 19:54:00

je t'ai juste fait ça de tête, sans tester ... juste pour te dire que ta méthode est plutôt bourrine et demande énormément de cycles CPU ... après tu as le droit d'être butté et de croire que ton code est le meilleur, c'est ton droit le plus stricte. Mais si tu ne veux pas de critiques, ne postes pas ton code ici ..

Sur ce, je me lave les mains de toi et de tes assurances. Je ne t'aiderais plus à évoluer.

Peg'

signaler à un administrateur
Commentaire de pegase31 le 16/07/2007 20:03:47

ah si, une dernière chose : si tu n'arrives pas à avoir du code correctement formaté sous Flash c'est que te transferts sont foireux et que tu devrais commencer par là ... coder tes xmlen utf8, par exemple ou voir à arranger tes PHP .. et si même avec ça t'arrives à rien, exxaue cette simple ligne de code :

System.useCodepage = true;

Et même si avec tout ça ça ne marche pas, pense à la corde ..

Peg'

signaler à un administrateur
Commentaire de Loubiou le 16/07/2007 21:23:30

Bon je ne veux pas polémiquer avec toi mais encore une fois tu ne prends pas le temps de l’analyse.
Le dev est avant tout un état d’esprit et poser un problème c’est mettre en évidence sa solution (n’est-il pas ?).
En effet, mon code, comme son titre l’indique, propose de décoder des mots html dans une phrase et pas d’autres. Rien à voir avec un pb quelconque de décodage html. Je maîtrise parfaitement les TextField ! Si j’ai un problème, j’utilise le forum prévu à cet effet.
J’ai dernièrement écrit une fonction flash qui décode les caractères  cyrilliques pour les afficher dans une page de code FR. Le cyrillique à bien plus de caractères que le Français ! Je penserais à la mettre en ligne si l’on me demande. Elle peut s’appliquer pour le chinois ou thaï.
Tu vois, je suis en train de développer une admin de news FLASH formaté en HTML donc j’ai besoin de voir certain codes mais pas d’autres afin de pouvoir les gérer. Comme je suis obligé de travailler dans des nœuds pour des raisons X j’ai parfois certain caractères en HTML indésirables alors que si je pouvais utiliser des attributs, mon XML serait lu plus vite et mieux décodé. Mais là n’est pas le propos !  C’est une question de cahier des charges dont je ne suis pas l’auteur. (cf  mon post sur le chargement de 2000 données en moins d’une seconde et la théorie des attributs expliquée par PhilFlash sur son merveilleux site.
Je te remercie pour la commande que je connais depuis flash4 mais mes XML sont formatés en UTF8 et j’utilise des fichiers CSS avec des  styleSheet.
Je ne veux pas rentrer en conflit avec toi, juste te dire que ma méthode « bourrine » est fonctionnelle et permet de décoder tous les mots (répétitifs ou pas dans une phrase)  alors que la tienne ne fonctionne que sur des chaines et pas sur des textfield et qu’elle ne décode pas toutes les même occurrences d’une même phrase. C’est pour moi un incohérence.
Il n’y a pas de formule miracle qui travaille directement sur un champ texte en recherchant tous les mots et tous les doublons dans une même phrase en une ligne de code !
J’aurais pu prendre l’exemple d’un traducteur (arf) car il arrive dans une phrase que plusieurs mots soient répétés.
Maintenant je ne cherche pas à montrer que mon code est le meilleur, car on peut toujours optimiser. Mon but est de faire partager.  Concernant les temps machines, je peut te les calculer tu serait très surpris !! Maîtrises-tu  l’assembleur ?
Si tu proposes mieux avec la même fonctionnalité, je serais très intéressé de l’étudier et t’en remercie par avance.
Franchement, tes nerfs passés, prends le temps de comprendre mon propos, d’analyser la problématique  d’après mon code  que tu lis parfaitement si tu le veux, et essayons d’en sortir du concret.  Tout le monde peut se tromper (moi compris) dans une société ou nous sommes habitués  à traiter les effets sans analyser les causes !

signaler à un administrateur
Commentaire de Loubiou le 16/07/2007 21:31:21

Je pose le problème suivant :
j'ai sur la scène la phrase suivante (DANS UN CHAMP TEXTE):

my_text.text = "aazerty,<lm>,&apos;&apos;azerty&apos;";

Je veux écrire une fonction qui me décode :
&apos; en  1
azer   en  2
,<     en  3
>,     en  4

Que cette fonction soit bourrine ou hyper hype lol mais qu'elle me donne :  a2ty3lm4112ty1

Le problème est posé et je propose une ébauche de solution.






signaler à un administrateur
Commentaire de Girou le 17/07/2007 11:49:45

Hello,

je cherche pas a savoir qui a raison, qui a tord...
Mais au probleme posé ci-dessus, a savoir :

Que cette fonction soit bourrine ou hyper hype lol mais qu'elle me donne :  a2ty3lm4112ty1

la solution la plus simple et la plus rapide est la suivante :

my_text.text = "aazerty,<lm>,&apos;&apos;azerty&apos;";
var Tab_code = new Array ( ["&apos;", "1"],["azer" , "2"],[",<" , "3"],[">," , "4"]);
for (var i=0; i<Tab_code.length; i++) {
     my_text.text=my_text.text.split(Tab_code[i][0]).join(Tab_code[i][1]);
}

Le contenu du champs de texte au final est bien égale à :

a2ty3lm4112ty1

taa daaaaaaaaaaaaaaaaaaaaaaaaa
Qu'est ce que j'ai gagné ????

@+
Girou

signaler à un administrateur
Commentaire de Loubiou le 17/07/2007 13:25:47

Alors je dit BRAVO ! tout ça pour en arriver là ! lol

Ton code fonctionne parfaitement (enfin le code de pegase31 ;-))

la fonction traite bien toutes les occurences similaires dans la phrase et ce pour l'ensemble des mots à décoder !





signaler à un administrateur
Commentaire de Girou le 17/07/2007 13:33:58

Ben oui...

j'utilise assez souvent ce principe de split / join c'est très pratique :o)

signaler à un administrateur
Commentaire de pegase31 le 17/07/2007 13:38:15

après on dira que je suis mauvaise langue ...
la prochaine fois je ne le ferais pas de tête.

Peg'

signaler à un administrateur
Commentaire de Loubiou le 17/07/2007 22:11:41

Désolé pour ma vaindicavité mais je suis assez cartésien car j'aime la rigueur.

- Si ce n'est pas un défaut, c'est "chiant" dit-on ... je le concède volontier ;((

Je vais tester cette formule pour voir si elle peut s'appliquer à mon dev en cours.
En effet, parfois dans certaines conditions on a des bugs alors qu'un bout de code semble bien fonctionner en isolé.
Pour l'instant je ne lui trouve rien à redire en toute bonne fois.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

loader.html dans un seul popup [ par jacomo ] salut, en partant de flash je voudrais loader des pages html dansun seul popup. x liens dont les pages vont dans un seul popup .comment faire ; la fon Mailing en flash ???? [ par CyRiL094 ] Bonjour à tous, j'ai un petit soucis pour réaliser ma transformation de mon formulaire html de http://www.spliolist.com en flash.Voici le formulaire e TOMMMmmmmmm [ par bassman64 ] Arf désolé ! j'ai tj pas compris comment fallais faire pour mettre des accents lorsque tu charges des variables à partir d'un fichier text :(Moi j'ai Appel SWF avec param en HTML ... [ par guidal ] Je développe un site pour une assoc mais ne veux pas m'en occuper toute ma vie.Le problème, c les boutons flash, je voudrais savoir si qq'un avais déj paramètres dans la page html [ par tieutieu ] salutest-il possible de rajouter des paramètres personnels dans l'appel du flash dans la page html?si oui comment???et comment ensuite les récupérer d INSERTION DE FLASH DANS HTML OU PHP (DEBUTANT) [ par HACKTIF ] Bonjour,J'ai un petit pb comment insert-on una anime flash dans une page html ou phpPar avance merci INSERTION DE FLASH DANS HTML OU PHP (DEBUTANT) [ par HACKTIF ] Bonjour,J'ai un petit pb comment insert-on una anime flash dans une page html ou phpPar avance merci INSERTION DE FLASH DANS HTML OU PHP (DEBUTANT) [ par HACKTIF ] Bonjour,J'ai un petit pb comment insert-on una anime flash dans une page html ou phpPar avance merci pb de formatage de nom de chaine. HELP ! [ par nirousse ] Je sais pas si mon titre est bien explicite...voila, g le code suivant :if (dot0.hitTest(dot)) { trace("STOP !!!"); }cela marche, mais le pb, c ke m texte externe [ par BlackEagle ] salut,j'ai un problème avec le chargement d'un texte externe... les caractères spéciaux comme les "é" ou "à", etc. ne s'affichent pas du tout...j'ai r


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.