begin process at 2012 05 28 23:11:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Fermer les balises html en fin de requete


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fermer les balises html en fin de requete

jeudi 6 juillet 2006 à 18:54:05 | Fermer les balises html en fin de requete

badben

Bonjour,

Je cherche une fonction qui permet de fermer les balises HTML d'une variable texte qui comprend de code HTML.
Au cas ou l'utilisateur ne ferme pas correctement les balises.

Par exemple, ici, là, dans ce forum je vais essayer de tapper un message comprenant des balises HTML :

bonjour je suis un message, et je suis <b>gras.

Comme vous le voyez la balise <b> est ouvete mais pas fermée. Par contre le texte suivant n'est pas en gras car : ou les balises HTML ne sont pas activées sur ce forum ou bien une parade a été installée.





jeudi 6 juillet 2006 à 18:57:33 | Re : Fermer les balises html en fin de requete

badben

Voilà j'ai fait le test sur le forum, et les balises HTML ne sont pas autorisées, pas de pôt pour moi :) mon exemple foire.

Mais bon en gros je désire une fonction qui permette de résoudre ça :

bonjour je suis un message, et je suis <b>gras.

-> bonjour je suis un message, et je suis <b>gras.</b>

Et donc ajouter une balise fermante en fin d'affichage.

Je peux toujours mettre echo '</b></script></i></u></strong></ul></li>...'; après l'affichage de ma variable mais bon.


jeudi 6 juillet 2006 à 21:48:24 | Re : Fermer les balises html en fin de requete

nightlord666

Membre Club
Tu crée une pile FILO, tu pushe les balises à chaque fois que tu en trouve une, et tu pop tout àla fin, c'est le plus simple à faire je pense.

//Libère ma mémoire que j'ai utilisé
this->GetCurrentConversation()->FreeAllocatedMemory(REASON_UNUSED);
jeudi 6 juillet 2006 à 22:47:59 | Re : Fermer les balises html en fin de requete

friedman

Sinon tu utilises le système D, tu enregistre ton texte dans une variable (sa ne changera pas de d'habitude)
tu verifie si la balise gras existe sinon tu la ferme en fin de texte.
J'espere pour toi qu'une fonction existe, car je me vois mal utilisez ma methode
vendredi 7 juillet 2006 à 06:16:05 | Re : Fermer les balises html en fin de requete

malalam

Administrateur CodeS-SourceS
hello,

il n'existe pas de fonction toute prête pour ça.
La solution de NightLord est la meilleure, mais elle est plus complexe qu'il n'y parait...(il faut faire attention dans ce cas aux balises qui, elles, sont fermées...ne pas les mettre dans la pile, et ne pas créer de mauvaise imbrication).
vendredi 7 juillet 2006 à 11:22:21 | Re : Fermer les balises html en fin de requete

nightlord666

Membre Club
En fait, à chaque balise trouvée, on la pushe dans la pile, sauf si c'est une balise vide (img / br / hr) : dans ce cas là on vérifie si elle est bien fermée. Quand on trouve une balise de fermeture, on regarde si il s'agit du même tag que dans la pile, si c'est le même on pop, si c'est un autre on lance une erreur. A la fin, si il reste des balises dans la pile, on pop.

Je pense que ça devrait marcher comme ça, je vais essayer et je posterais peut-être la source içi.

//Libère ma mémoire que j'ai utilisé
this->GetCurrentConversation()->FreeAllocatedMemory(REASON_UNUSED);
vendredi 7 juillet 2006 à 11:40:00 | Re : Fermer les balises html en fin de requete

badben

Cool merci.


vendredi 7 juillet 2006 à 12:27:54 | Re : Fermer les balises html en fin de requete

nightlord666

Membre Club
Bon après une heure de programmation, j'en arrive à ça :

<?php

//Une classe utilitaire pour faire une pile FILO en PHP
class FILO
{
  private $stack;

  public function FILO()
  {
    $this->stack = array();
  }

  public function push($elem)
  {
    array_unshift($this->stack, $elem);
  }

  public function getFirst()
  {
    return $this->stack[0];
  }

  public function pop()
  {
    $value = $this->stack[0];
    array_shift($this->stack);
    return $value;
  }

  public function isEmpty()
  {
    return empty($this->stack);
  }
}

function fermer($text)
{
  $temp = $text;
  $transformed = $temp;
  $stack = new FILO();

  //Tant qu'on trouve des tags, on boucle
  while(true)
  {
    if(strlen($temp) == 0) break;
    $pos1 = strpos($temp, '<');
    if($pos1 == -1)
    {
      break;
    }

    $pos2 = strpos($temp, '>');
    if($pos2 == -1)
    {
      throw new Exception('Un caractère &lt; a été trouvé sans caractère &gt; correspondant.');
      break;
    }

    //On récupère le tag
    $tag = substr($temp, $pos1 + 1, $pos2 - $pos1 - 1);
    //echo $tag.'<br/>';

    if($tag[0] != '/')
    {
      //Si c'est une balise sans fermeture, on ne la pushe pas
      if($tag[strlen($tag) - 1] != '/')
        $stack->push($tag);
    }
    else
    {
      //On vérifie que c'est le bon tag de fermeture
      $tag = substr($tag, 1, strlen($tag) - 1);
      if($stack->getFirst() != $tag)
      {
        throw new Exception('Les balises d\'ouverture / fermeture ne correspondent pas');
      }

      //On pop
      $stack->pop();
    }

    //On tronque la chaine après le tag
    $temp = substr($temp, $pos2 + 1, strlen($temp) - 1 - $pos2);
    //echo $temp.'<br/>';
  }

  //Tant que ce n'est pas vide, on pop
  while(!$stack->isEmpty()) $transformed .= '</'.$stack->pop().'>';

  return $transformed;
}

$text = fermer($_GET['texte']);
echo htmlentities($text);


?>

Dis moi si ça te convient !

//Libère ma mémoire que j'ai utilisé
this->GetCurrentConversation()->FreeAllocatedMemory(REASON_UNUSED);
mardi 19 janvier 2010 à 20:25:42 | Re : Fermer les balises html en fin de requete

Dahevos

Désolé de upper le sujet, mais ce genre de fonction m'intéresse ENORMEMENT ( j'en ai clairement besoin pour un projet que je dois rendre très bientôt ) et donc j'aimerai savoir si une âme charitable pourrait corriger le script trouvé plus haut, car il ne fonctionne pas :(

Si j'ouvre une balise avec <em> par exemple, et que je la ferme pas, voila ce qu'il me donne :

<em> j'ai oublié de fermer </>></></?></m?></rm?> etc..... ca continue comme ca en boucle donc ca bug :(

je voulais savoir aussi si je fais un </strong> si ce ignorer celui-ci ( si par exemple on avait pas ouvert de <strong> avant !

Merci de me répondre !


Cette discussion est classée dans : fin, requete, html, fermer, balises


Répondre à ce message

Sujets en rapport avec ce message

Balises HTML et affichage ... [ par Tomcube ] Existe-t-il des scripts qui permettent d'ajouter une mise en forme aux messages de la même manière que le permet le HTML, mais avec une syntaxe plus s Supprimer les balises html d'une chaine de caractère [ par SAaD44 ] Salut !Voila, je cherche le moyen de supprimer toutes les balises html (de début et de fin) d'une chaine de caractère.Merci d'avance SAâD Filtrage de balises HTML... [ par SDK_akira ] Bonjour,Je travaille actuelement sur un site web ou les membres ont la possibilité de laisser des messages pour faire vivre le site (c'est un jeu) or comment empêcher les balises html? [ par jnbrunet ] Comment éviter qu'une personne utilise des balises html dans un forum ou autre type de faille?Jn fermer popup automatiquement [ par kakol ] Bonjour,J'ai juste un petit soucis.J'ouvre une popup avec contenant un formulaire et un bouton Valider.Quand je clique sur valider je veux que ma requ supprimer le contenu des balises script [ par caviar ] Saluté ...j'ai un petit casse tête à résoudre ...j'aimerai filtrer les balises scripts dans un code html et les supprimerimaginon que j'ai en html ava textarea et balises html [ par David_monchy ] Salut à tous, contrairement aux autres questions du forum, qui demandent en général comment éviter que le code html soit traduit, moi je voudrais par code html [ par ldevun ] Bonjour,j'ai créé un forum et donc lorsqu'une personne rentre un message celui ressort avec des balises HTML :Entrer ici les nou éliminer les balises html [ par hadjiphp ] Bonjour, merci pour ce site et souhaite de trouver tous ce que je veux. je vous remercie. Bonjour, j'ai une question : j'ai une page web et je Supprimer les balises html [ par ImmortalPC ] Salut,J'aimerai savoir comment faire pour supprimer tout les balises éventuelle et ne garder que le texte tout cela dans une varriable ou plusieurs.J'


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales