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 !

ENLEVER DES BALISES HTML DANS UNE TEXTAREA


Description

Ce code permet d'enlever les balises html non désirable que l'on peut mettre dans une textarea.
Une liste blanche permet de ne pas enlèver ceux que vous voulez garder.

Code a simplifier peut être
 

Source

  • <?
  • $txt="<youyou><a href='totot'><TG></youyuo>hihihi</a> sa va bien? <br> jé vo<jigpjei><strong>ulais savoir ce que sa fait d'être nul <u>underline</u>? ";
  • $txt=Mail_balise($txt);
  • echo $txt;
  • function Mail_balise($txt)
  • {
  • include_once("../../commun/globales.inc.php");
  • ?><script>alert('tototo');</script><?
  • $nb = strlen($txt); // calcule le nombre de caractère
  • $i=0;
  • $trouver=false; // pas de balise trouver
  • while ($nb > $i)
  • {
  • $chaine = substr ($txt,$i,1); // on découpe caractère par caractère
  • if (($chaine=="<")||($trouver)) // si on trouve un <
  • {
  • //echo "<br>";
  • if(!$trouver)// si on n'a rien trouver précédament
  • {
  • $trouver=true; // on a trouver quelque chose
  • }
  • $balise.=$chaine; // on ajoute petit a petit les caractère de la balise
  • // permet de récupéré toute les balises.
  • if($balise=="<a href=")
  • {
  • $trouver=false; // une exeption
  • $balise="";
  • }
  • if($chaine==">") // si on est arriver a la fin de la balise
  • {
  • $j=0;
  • $existe=false;
  • while(($j<9)&&(!$existe))
  • {
  • if($balise==$Tab_balise[$j])
  • {
  • //echo htmlentities($balise)."<br>";
  • $existe=true;
  • }
  • $j++;
  • }
  • if(!$existe)
  • {
  • $txt= str_replace($balise," ",$txt); // si el est mauvaise, on la l'enlève
  • $i=1;
  • }
  • $balise="";
  • $trouver=false; // on remet a faux
  • //echo htmlentities($balise);
  • //echo "<br>";
  • }
  • }
  • $i++;
  • }
  • return $txt;
  • }
  • ?>
<?


$txt="<youyou><a href='totot'><TG></youyuo>hihihi</a> sa va bien? <br> jé vo<jigpjei><strong>ulais savoir ce que sa fait d'être nul <u>underline</u>? ";
$txt=Mail_balise($txt);
echo $txt;

function Mail_balise($txt)
{
	include_once("../../commun/globales.inc.php");
	?><script>alert('tototo');</script><?
	$nb = strlen($txt); // calcule le nombre de caractère
	$i=0;
	
	$trouver=false; // pas de balise trouver
	while ($nb > $i)
	{
			$chaine = substr ($txt,$i,1); // on découpe caractère par caractère
			if (($chaine=="<")||($trouver)) // si on trouve un <
			{
				//echo "<br>";
				if(!$trouver)// si on n'a rien trouver précédament
				{
					$trouver=true; // on a trouver quelque chose
				}
					
				$balise.=$chaine; // on ajoute petit a petit les caractère de la balise
									// permet de récupéré toute les balises.
									
				if($balise=="<a href=")
				{
					$trouver=false; // une exeption
					$balise="";
				}
				
				if($chaine==">") // si on est arriver a la fin de la balise
				{
					$j=0;
					$existe=false;
					while(($j<9)&&(!$existe))
					{
						if($balise==$Tab_balise[$j])
						{
							//echo htmlentities($balise)."<br>";
							$existe=true;
						}
						$j++;
					}
					if(!$existe)
					{
						$txt= str_replace($balise," ",$txt); // si el est mauvaise, on la l'enlève
						$i=1;
					}
					$balise="";
					$trouver=false; // on remet a faux
					//echo htmlentities($balise);
					//echo "<br>";
				}				
			}
			$i++;
	}
	return $txt;
}

?>

Conclusion

J'ai chercher un code plus simple, mais j'ai décider de le faire a ma sauce ce qui veut dire le plus compliquer possible, mdr :p
 

Commentaires et avis

signaler à un administrateur
Commentaire de malalam le 14/02/2008 16:26:18 administrateur CS

Hello,

tu peux faire ça en une ligne avec :
- une expression régulière
- http://www.php.net/manual/fr/function.strip-tags.php

signaler à un administrateur
Commentaire de webdeb le 14/02/2008 23:28:58

+1 avec Malalam...

signaler à un administrateur
Commentaire de codefalse le 14/02/2008 23:31:52 administrateur CS

En effet, une seule ligne te permet cela avec les expressions régulieres ! :p
Perdu ! Tout ce temps de gaché !

Sinon, "Code a simplifier peut être", euh oui :
#  ?><script>alert('tototo');</script><?

;)

signaler à un administrateur
Commentaire de Amnesiak le 15/02/2008 08:38:20

Et oui, strip_tags() et son paramètre "liste blanche" t'auraient épargné tout ce travail ;-)

signaler à un administrateur
Commentaire de coucou747 le 15/02/2008 11:29:02

ton code est assez moche pour certains trucs (un include dans une fonction, un vieux html, etc...), ton code est en vieux php4 (php6 va sortir bientot), on aurait pu s'attendre a voir une truc genre "classe traitement de html & BBcode" mais non, ton code ne fait "que" supprimer des balises non desirees, et il le fait mal :
<a style=":)" href=...>

de plus, une fonction standard le faisait deja....

signaler à un administrateur
Commentaire de keket le 15/02/2008 19:05:28

lol, désolé, je le savais pas. Jdemandais juste de laide pour le faire sur le fofo, mais personne n'a réussi a me donner une réponse, je me suis débrouiller comme je pouvais ^^.

signaler à un administrateur
Commentaire de cload le 18/02/2008 19:01:24

Pauvre keket ! Voilà bien l'art de casser. Malalam donne des infos avec tact. Coucou explose la gueule de tous les trous du q qui, bien que classant humblement leur script en débutant, ont l'audace de ne rien apprendre au vieux loup du regex dans le plus que parfait.
Plus personne ne va oser proposer de code à ce rythme !
Il n'y a pas de modérateur ici ?

signaler à un administrateur
Commentaire de coucou747 le 18/02/2008 19:33:47

lister les problemes d'une soure, c'est pas la meme chose qu'exploser la gueule de qqn...

j'aurais du dire quoi ? un truc genre :

"j'ai le regret de t'annoncer que la balise <? n'est pas activee sur mon serveur, tu devrais utiliser <?php pour la compatibilite, ce qui me permettrait d'utiliser avec joie ton formidable script, apres avoir change tes balises en equivalent ``a la norme``."

signaler à un administrateur
Commentaire de malalam le 18/02/2008 20:02:34 administrateur CS

@cload =>
que n'aimes-tu pas ? Mon "tact", ou "l'explosion de gueule" de Coucou ?

Une chose est certaine : il est difficile de répéter 1000 fois les mêmes choses en gardant son calme, malheureusement.
Certes, parfois, et selon les caractères..."on" y va un peu trop fort.
Il n'empêche, quand on poste un code sur phpcs, c'est sans doute qu'on est "actif" sur phpcs, même si notre activité consiste à lire les commentaires et post. Et à ce compte là, il me semblerait normal de tâcher de ne pas faire les mêmes bêtises qui ont été maintes fois décriées. Sinon, forcément, on s'expose à être aussi décrié.

Pour être franc, j'ai hésité à supprimer ce code, avec simplement ma remarque en commentaire pour l'auteur. Mais ce code est une réponse (mauvaise certes pour les raisons cités, mais une réponse quand même) à une problématique fréquente. Mon espoir donc est que quelqu'un ayant le même problème tombe sur ce code, LISE les commentaires et les utilise à bon escient. Là où je me leurre bien évidemment c'est que la plupart du temps, ce quelqu'un va tomber sur ce code, ne tenir aucun compte des commentaires et l'appliquer tel quel.
Et ce même quelqu'un , un jour, postera sur phpcs un code présentant les mêmes erreurs, et...forcément, il sera critiqué.
Et ça, ça me gêne...parce que si je virais tous les codes "mal codés" de phpcs, ce quelqu'un serait bien obligé -sans même le savoir- de n'avoir que de bons exemples sous les yeux.
La critique n'est jamais agréable. Mais personne n'a jamais dit que l'apprentissage était un chemin facile et bordé de jolies petites fleurs, sous un ciel magnifique et un soleil radieux. SAUF quand on tâche vraiment d'appliquer les conseils -avisés tant qu'à faire- de personnes plus expérimentées.
Certains codes de débutants sont bien accueillis, d'autres moins. A qui doit en incomber la faute, réellement?

De plus, keket a bien réagi je trouve. Ce que j'aimerais maintenant, c'est qu'il propose une alternative mieux foutue à son code, de manière à bien montrer la "good practise".  Mais sans supprimer la "bad practise" parce ce que sinon son code se résumerait soit à une fonction php existante, soit à une simple expression régulière...ça n'aurait pas grand intérêt ici (plutôt sur codyx.org).

signaler à un administrateur
Commentaire de codefalse le 18/02/2008 20:45:36 administrateur CS

Codes-Source a la mauvaise réputation d'être un site qui critique toutes les sources, avec toujours de mauvais avis, sec, méchant parfois même insultant. Je comprends que quand on passe 1 jour, 1 semaine, 1 mois sur un truc dont on est fière, que l'on veux le partager, et qu'en échange on obtient des "tu peux faire ça en une ligne", "ton code est assez moche", et parfois pire, genre juste un "c'est nul !".
La chose importante, c'est que le commentaire est pour la plupart du temps expliqué, c'est ca qu'il faut retenir !

Malalam à déjà résumé les grandes lignes, je vais pas le répeter. Je tiendrai juste à dire que quand je laisse une source qui devrait être supprimée, je met généralement une remarque à l'auteur de la source comme quoi s'il ne fait pas d'efforts pour l'améliorer, il se verra sa source supprimée.
Car c'est ca qui est important ! Que vous ayez posté un code de x lignes qu'une fonction toute faite fait déjà et que vous ne cherchez pas à la rendre meilleure, je ne vois pas l'utilité de la laisser. Maintenant si vous montrez l'importance que vous y attachez, alors elle aura tout son mérite à y rester !

Courage et perseverez !
(Surtout vous, Malalam et Coucou, vous avez tant à apprendre ! ;) :p) )

signaler à un administrateur
Commentaire de cload le 19/02/2008 08:14:55

Désolé pour mon ambiguité Malalam, je parlais de coucou.Et je suis assez d'accord avec ton commentaire.
Mais, avec sa réaction, je vois que le 747 sais aussi mettre de l'eau dans le vin (au figuré, bien sur). Il fait partie des plus brillants de coudesource mais sa façon rebrousse-poil finit par... rebrousser le poil.
On a tous débuté. Et on n'a pas persévéré parce que des caïds nous écrasaient, mais nous encourageaient.
Mes excuses aux modérateurs semblant mis en cause (Malalam, Codefalse...) : j'apprécie toujours vos commentaires qui sont toujours mesurés. Ma demande est de calmer certains débordements. Cela ne retire rien aux qualités de ceux qui les émettent et j'ai beaucoup appris grace à coucou747. Mais de bonnes limites dans la comm ne peuvent pas faire de mal.

signaler à un administrateur
Commentaire de malalam le 19/02/2008 09:37:26 administrateur CS

@cload => je suis d'accord avec toi, et je suis bien conscient que Coucou s'emporte parfois un peu trop. Et je sais qu'il le sait aussi. EZt qu'il entendra ce message :-)

signaler à un administrateur
Commentaire de keket le 19/02/2008 15:48:09

salut, par manque de temps, j'ai pas pu changer mon script, mais je le ferais plus tard.
j'ai réussi a changer mon include dans mon code par une variable globale, sa fait plus bo :p. A +. Et merci Malalam ;)

signaler à un administrateur
Commentaire de codefalse le 19/02/2008 17:05:32 administrateur CS

Utiliser une variable globale, c'est déjà mieux, mais c'est quand meme déconseillé (moin que l'inclusion dans la fonction, jte rassure ;)).
En fait, tout ce que tu veux que ta fonction utilise, fait lui passer en paramètre. Si j'ai rien loupé, ton fichier globales.inc.php ou ta variable globale contient un tableau de balises que tu veux garder c'est ca ? Si oui passe lui en deuxième paramètre un tableau contenant la liste des éléments que tu veux garder et hop ! :)

signaler à un administrateur
Commentaire de coucou747 le 19/02/2008 17:40:43

j'ai aucune idee de comment dire ca... il y a plein de fois ou sur le net, je posais une question, et on me disait des trucs genre :
"mais rtfm sale noob"
ou genre
"debrouille toi seul ou avec google"
alors comment dire a un mec qu'il a fait un truc pas terrible et qu'il devrait se documenter ? Si ce n'est : lister les erreurs pour qu'il puisse poser des questions et chercher sur google plus facilement ?

je croyais ma facon de commenter les sources et repondre au forum, plus courtoise et plus utile...

ne faire que lister les erreurs et proposer des ameliorations sans m'impliquer, sans dire ce que j'en pense vraiment, je croyais que c'etait la solution la plus "politiquement correcte" de m'adresser aux auteurs de sources...

mettre un tu peux plait
mettre un tu aurais du, tu dois, tu ne dois pas, ne plait pas...

je ne comprends pas vraiment pourquoi quand je dis que le code ici ne DOIT PAS etre utilise, ca choque, alors que quand qqn dit qu'on ne doit pas diviser par 0 en math, ca ne derange personne...

sur ce, je ne commente pas pour etre aime, sinon, j'ajouterais plein de <3 :) ^^ partout, et personne n'en aurait rien a faire...

par contre, quand je vois une source `debutant`, j'aimerais qu'on me laisse tranquile quand j'essaie de lui expliquer comment il doit coder pour poster ses prochaines en `initie`, voir updater la source vers `initie`, si il la travaille correctement...

c'est pas en crachant a la figure des gens qu'on en obtient quelquechose, j'en suis certain, mais je n'ai jamais(ou rarement) crache a la figure des gens, sur CS, a partir d'une simple source (j'ai fait d'autres erreurs, j'en conviens), j'ai critique le code qu'ils avaient soumis a la critique.... je liste les defauts de la source, pas de l'auteur....

si tu vas voir un skyblog au hazard, tu verras des trucs genre : "wesh T tro bo" ca c'est pas qqch de constructif, ici, les commentaires n'ont pas ce role... quand on poste, c'est pas dans le but de lire :
"super cool, c'est tout ce que je cherchais"
parce-que ce qu'un inconu cherche, on s'en fout quand on poste...
on poste pour partager, certe, mais pas seulement pour partager un code, pour partager une methode, un algo, etc... On poste aussi pour s'ameliorer, et c'est pour ca qu'un commentaire genre "a la ligne 42 t'as une faille de securite" poste sans courtoisie, de facon brute, sera TOUJOURS plus utile que "trop cool comme code !"

alors je pourrais faire comme les admins CS : ajouter "cordialement" a la fin de mes commentaires, mais j'ai aucune envie de m'impliquer dedans... je liste les defauts, si il ameliore, je note, sinon, je quitte, et quand qqn revient plusieurs mois apres, si il dit genre "trop bien" alors que la source est toujours aussi mauvaise, je mets "1/10" pour que personne ne se leure... je mets rarement 1/10 comme ca, des les premiers jours, pour le plaisir de mettre 1/10... Et j'en ai marre de me faire insulter sur CS aussi, donc si je sors un "cordialement", ou autre formules (pompeuses) du genre, ca risque de se retourner contre moi, a un autre moment...

Sur ce, c'est toujours un plaisir de voir que mes critiques sont lues, que mes propositions d'ameliorations servent a quelquechose, et j'attend avec impatience la V2 de ce code (non pas pour l'utiliser, mais pour voir si mes critiques (bien que parfois brutales) sont utiles ou pas)

signaler à un administrateur
Commentaire de abdelaziz_info le 25/02/2008 02:11:52

Bonjour à tous :

Sauf ceux qui aiment ce qu'ils font qui attendent avec impatience la résulta de leur travail, ne t'inquiètes pas (coucou747) tu as souvent des très bonnes idées que j'apprécie bien ..
En plus le premier code que j'ai testé en arrivant sur (phpcs) été le tien, et ça fonctionnait parfaitement ;  je ne l'ai pas noté mais je vais immédiatement le faire, et je te merci.


Pour ce code en cotés technique et théorique les experts ont dit leurs mots, mais du coté pratique ce code fonctionne et ne déclanche aucune alerte d'erreur sauf les espaces qui remplacent les balises :
Avec ($balise," ",$txt) avec ça ($balise,"",$txt) le texte est plus correcte.

Merci à tous et bon courage.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Filtre de balise HTML dans une textarea [ par keket ] Bonjour, je voudrais mettre en place un filtre qui remplacerais les balises html contenu dans une textarea par une chaine vide. Mais le problème est q question [ par motorolav3 ] salut,j'ai préparé l'interface de mon module de paiement electronique et il me reste la partie qui concerne la sécurité des transactions. réllement,je Balise META et moteurs de recherche [ par epineurien ] Bonjour à tous !Pour commencer je sais pas trop si je suis sur le bon forum , mais comme ceux qui font du php doivent s'y connaitre un minimum en html Enlever la 'lecture seule' d'un fichier [ par lowkey ] Salut à tous !Voici mon problème : Avec une fonction, je parcours tous les fichiers d'un dossier. Je souhaiterais supprimer ces fichier avec un unlink Filtrer un signal en php [ par magicsmacks ] Bonjour,Je cherche à me fabriquer un filtre 50 Hz en php.Je sais que les formules initiales sont trop compliquées pour le php. Mais je sais aussi qu'i la balise meta [ par hou1919 ] Salutj'ai un probleme avec cette instruction en utilisant internet explorer&lt;meta http-equiv="refresh" content="0;URL=affetatciviltmp.php&gt; et mer Balise Html Xml vers Xsl [ par toomsbzh ] Bonjour, je suis désolé mais je ne pense pas avoir posté au bon endroit mais bon...Voila mon souci, j'ai un fichier xml assez conséquent qui contient comment insérer un saut de ligne entre chaque balise xml ? [ par nicomilville ] Salut,je suis confronté a un problème, je fais un chat en php avec xml mais je n'arrive pas a sautter de ligne entre chaque balise xml de mon fichier, filtrer un tableau [ par bahoo ] bonjour tous le monde je suis en train de develloper une application de gestion des document. et mon pb est que quand je fait une recherche multicrit sécurité site php [ par waterw72 ] Bonjour,Puis-je mettre un chmod sur tous mes fichiers php de mon site?Cela fait plusieurs fois, que je retrouve du code écrit dans mes fichiers php. C


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



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 : 3,713 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é.