Code solutions to PHP, JS, CSSCode source PHP, JS, CSS

Répandez vos soluces sur la planète

Love me
Solucior » PHP » Fonction pour fermer les balises HTML

Fonction pour fermer les balises HTML

05/12/2011 par Dux   -   4.7/5 (3 notes)

Une fonction simple pour fermer toutes les balises HTML ouvertes d'un texte. A utiliser par exemple lorsque vous proposez un champ éditable avec du HTML.

code source



 
<?php
function close_tag_html($text) {
   
preg_match_all("/<[^>]*>/", $text, $bal);
   
$liste = array();
   foreach(
$bal[0] as $balise) {
       if (
$balise{1} != "/") { // opening tag
           
preg_match("/<([a-z]+)/i", $balise, $type);
           
// add the tag
           
$liste[] = $type[1];
       } else {
// closing tag
           
preg_match("/<\/([a-z]+)/i", $balise, $type);
           
// strip tag
           
for ($i=count($liste); $i>=0; $i--) if ($liste[$i] == $type[1]) $liste[$i] = "";
       }
   }
   
   for (
$i=count($liste); $i>=0; $i--) if ($liste[$i] != "") $tags .= '</'.$liste[$i].'>';
   return(
$tags);
}

echo
html_entity_decode( close_tag_html('<div><span>Hello') );
?>

<div><span>Hello</span></div>
Noter ce code     |     Copié : 124x

Commentaires pour Fonction pour fermer les balises HTML

Beninho     09/08/2011 16:31
Bonjour,
j'ai amélioré votre code pour ne pas avoir d'erreur sur les indices de tableau.
($i=count($liste)-1)

J'ai aussi ajouté la gestion de la balise
<br/>
pour rendre le code compatible W3C.

function close_tag_html($text) {
       
   preg_match_all("/<[^>]*>/", $text, $bal);
       
   $liste = array();
       
   foreach($bal[0] as $balise) {
       
       if ($balise{1} != "/") { // opening tag
       
           preg_match("/<([a-z]+[0-9]*)/i", $balise, $type);
       
           // add the tag
       
           $liste[] = $type<1>;
       
       } else { // closing tag
                               
preg_match("/<\/([a-z]+[0-9]*)/i", $balise, $type);
                               
// strip tag
                               
for ($i=count($liste)-1; $i>=0; $i--){
                                       if (
$liste[$i] == $type<1>)
                                               
$liste[$i] = "";
                               }
                       }
               }
               
$tags = '';
               for (
$i=count($liste)-1; $i>=0; $i--){
                       if (
$liste[$i] != "" && $liste[$i] != "br") $tags .= '</'.$liste[$i].'>';
               }
               return(
$tags);
       }
Ajouter un commentaire Pseudo   Site
ZOOM


Bruitage sur une action avec HTML5
Largeur image dynamique selon son emplacement
Fonction pour fermer les balises HTML