Filtre HTML [Résolu]

Signaler
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
-
ldevun
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009
-
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;
}
?>

12 réponses

Messages postés
240
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009

ALORS UTILISE HTMLSPECIALCHARS();
hum...
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Salut,
sans même lire le code,  je pense que mettre $TagIsAllowed = true; devrait marcher
à+
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009

Non, ca ne marche pas.
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Alors efface cette partie :
($text{$i} != "<") OR
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009

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.
Messages postés
240
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009

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
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009

Bonjour,
Ca ne change rien, il ne m'affiche toujours pas les balises "<"...
Dites moi si vous avez d'autres idées. Merci
Messages postés
240
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009

echo htmlspecialchars($code_html);
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009

Je le fais ou cet echo? Quel est l'intéret, car je ne comprend pas
Messages postés
240
Date d'inscription
vendredi 14 juin 2002
Statut
Membre
Dernière intervention
17 mars 2009

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
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009

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} == "<")
Messages postés
58
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
7 avril 2009

Merci beaucoup ca marche avec htmlspecialchars();