Filtre HTML [Résolu]

Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
- - Dernière réponse : ldevun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
- 18 août 2006 à 15:01
Bonjour,
J'ai un filtre HTML que j'ai récupéré sur le forum, mais celui-ci a un probleme, il ne m'affiche pas les "<" des balises exemple :

P>Ca FONT color=#ff0000>marche







P> EM>pas très STRONG>bien

Voici le code du filtre html, merci de votre aide.

$TagIsAllowed = false ;
$CurrentTag = "";
$FilteredText="";
$i=0;
$j=0;


/* On parse le texte */


while($i<strlen($text))
{    if( ($text{$i} !"<") OR (($text{$i} "<") && ($text{$i+1}=="/" )     )  ) //on cherche des tags html
    { 
    $FilteredText = $FilteredText . $text{$i}; //si pas de tag html, pas de filtrage
    $j++;
    $i++;
    }
    else
    {
    $i++; //on s'interresse au caractere suivant le <
   
        /* on verife que le tag html utilisé est autorisé */   
     foreach ($tags as $TestTag)
        {
       
         $CurrentTag = substr($text,$i,strlen($TestTag));
       
         if (substr_count($CurrentTag,$TestTag) == 1) //si le tag est autorisé on agit en consequence
         {
         $TagIsAllowed = true ;
         $FilteredText = $FilteredText . ">" . $CurrentTag ;
         $i = $i + strlen($TestTag) ;
         }
       
        }
       
        /* si le tag n'est pas autorisé on efface tout jusqu'à la fin du tag */
        if ($TagIsAllowed = false) 
          {
              while ((substr($text,$i,2)!= "</" )&&($i<strlen($text)))
              {
              $i++;
              }
          }
       
       
    } 
}
 




/*Remplacement des \n par des
*/


$FilteredText = preg_replace('/\n/i', '
', $FilteredText);


return $FilteredText;
}
?>
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
244
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009
3
Merci
ALORS UTILISE HTMLSPECIALCHARS();
hum...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de psykocrash
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
0
Merci
Salut,
sans même lire le code,  je pense que mettre $TagIsAllowed = true; devrait marcher
à+
Commenter la réponse de Evangun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Non, ca ne marche pas.
Commenter la réponse de ldevun
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
0
Merci
Alors efface cette partie :
($text{$i} != "<") OR
Commenter la réponse de Evangun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Je viens d'essayer mais ca ne marche pas non plus ca.
J'ai cherché mais je ne trouve pas l'erreur pourtant il y en a bien une.
Commenter la réponse de ldevun
Messages postés
244
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009
0
Merci
if( ($text{$i} != "<") OR (($text{$i} == "<") && ($text{$i+1}=="/" )     )  ) //on cherche des tags html
if( ($text{$i} "<") OR (($text{$i} "<") && ($text{$i+1}=="/" )     )  ) //on cherche des tags html
Commenter la réponse de psykocrash
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Bonjour,
Ca ne change rien, il ne m'affiche toujours pas les balises "<"...
Dites moi si vous avez d'autres idées. Merci
Commenter la réponse de ldevun
Messages postés
244
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009
0
Merci
echo htmlspecialchars($code_html);
Commenter la réponse de psykocrash
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Je le fais ou cet echo? Quel est l'intéret, car je ne comprend pas
Commenter la réponse de ldevun
Messages postés
244
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009
0
Merci
Si je comprend bien, le visiteur peux écrire mais tu ne veux pas que le html qu'il pourrait mettre soit interprété par le naviguateur, c'est bien ça ? alors tu n'a qu'a utiliser la fonction htmlspecialchars($texte);

Sinon l'erreur pourra peut etre etre réglée si tu fait ça :
if ($text{$i} == "<") //on cherche des tags html
Commenter la réponse de psykocrash
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Oui, je souhaite que le texte que met l'utilisateur ne soit pas interprété s'il met du html. Mais je veux surtout mettre les balises html correspondant à la mise en forme que l'utilisateur a fait.

L'erreur n'est pas réglé si je fais : if ($text{$i} == "<")
Commenter la réponse de ldevun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
0
Merci
Merci beaucoup ca marche avec htmlspecialchars();
Commenter la réponse de ldevun