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

Spread your code soluces to the world

Love me
Solucior » PHP » Close HTML tags function

Close HTML tags function

05/12/2011 by Dux   -   4.7/5 (3 ratings)

A simple function to close all open HTML tags from text. To be used for example when you propose an editable field with HTML.

source code



 
<?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>
Rate this code     |     Copied : 119x

Comments for Close HTML tags function

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);
       }
Add a comment Nickname
ZOOM