› Close HTML Tags 
Wed, 07/19/2006 - 14:26
If you cut a html-formatted string at some random position (e.g. with my truncate() function) you might mess up the html. To circumvent that, this function will close all open tags at the end of the string:
The original function was written by connum at DONOTSPAMME dot googlemail dot com
/** * close all open xhtml tags at the end of the string * * @param string $html * @return string * @author Milian Wolff <mail@milianw.de> */ function closetags($html) { #put all opened tags into an array $openedtags = $result[1]; #put all closed tags into an array $closedtags = $result[1]; # all tags are closed return $html; } # close tags for ($i=0; $i < $len_opened; $i++) { $html .= '</'.$openedtags[$i].'>'; } else { } } return $html; }
Comments
Hi, thanks all for Fri, 03/18/2011 - 14:11 — Volo Kulpa (not verified)
<code>geshi:code| # close tags for ($i=0; $i < $len_opened; $i++) { $openedtags[$i] = strtolower($openedtags[$i]); if (!in_array($openedtags[$i],$arr_single_tags)) { if (!in_array($openedtags[$i], $closedtags)) { $next_tag = (($i + 1) < count($openedtags) ? strtolower($openedtags[$i+1]) : null); if ($next_tag && !in_array($next_tag, $arr_single_tags)) { $html = preg_replace('#</'.$next_tag.'#iU','</'.$openedtags[$i].'></'.$next_tag,$html); } else { $html .= '</'.$openedtags[$i].'>'; } } } } |code</code>
A small fix: I tried to Wed, 01/05/2011 - 23:25 — Plasmodino (not verified)
A small fix: I tried to ignore closing tags which do not have an opening tag, but it does not work the way I did it. The following code only works if the html syntax in the truncated string is correct:
I suggest the following code Wed, 01/05/2011 - 22:47 — Plasmodino (not verified)
I suggest the following code for closing open tags:
I suggest the following code Wed, 01/05/2011 - 22:29 — Plasmodino (not verified)
I suggest the following code for closing open tags:
I did not test it much yet, though.
This code (including all Tue, 10/19/2010 - 18:49 — Anonymous (not verified)
This code (including all following postings) has still a lot of problems. For example, it can not close that - the 2nd span will not be closed. <span>fjlfsdlkf <span>123 </span>
Little modified for closing Fri, 09/24/2010 - 12:37 — Anonymous (not verified)
Little modified for closing all the opened tags
Like incase if we have “<i><i>rr<b>rrr <i> dddd</i> <i> dddddd</i> <i>ssss”
Output would be : <i><i>rr<b>rrr <i> dddd</i> <i> dddddd</i> <i>ssss</i></i></b></i>
I would just like to point Thu, 07/08/2010 - 15:12 — Kim Steinhaug (not verified)
I would just like to point out that all of theese snippets for some reasons forgets to account for the most obvious error of them all, closing the H[1-6] tags! Breaking a page in the middle of a H1 tags has enormous impact of the rest of the page!
This simple code:
<h1>h1</h1> <p>p</p> <h1>
Does not work! Both the original and the updated versions for some reason does not fix this simple code. The second h1 will not get closed since its already closed the first time…
regards, Kim Steinhaug http://www.steinhaug.com/
this is quite good, and work Sun, 06/06/2010 - 12:41 — Web Dev (not verified)
this is quite good, and work for general tag closing, although I have managed to trip it in complex XHTML - thanks for sharing, I think this is good foundation for future work.
Try this! function Sat, 03/20/2010 - 00:44 — Berto (not verified)
Try this!
sssssssssssssssssssssssssssss Thu, 04/15/2010 - 21:09 — ssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfaaa (not verified)
ssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgssssssssssssssssssssssssssssssssssssssssssfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfgfg
hey, nice snipe thax for Sat, 03/13/2010 - 07:20 — Hack MLx (not verified)
hey, nice snipe thax for sharing.. but how do i make it work, where do i put because i need it for a script that a i added to a post body…
stripslashes(substr($info[‘post_body’],0,600));
i added that to make like a lil “continue reading” script i could found a plug in, i found some just for wordpress, so yea where do i need to add the function, thanks…
i wait for ur answer… thank you
Hi. Can you help me with such Thu, 02/12/2009 - 02:22 — Anonymous (not verified)
Hi. Can you help me with such problem - I truncate the html (to make a teaser from it) and your code helps to close all the tags, but I ecoutered a problem when a tag is cut in the middle (for example - instead of “<p>” on the end I have “<p” only. How can I add the “>” when it’s needed?
The easiest would be to check Thu, 02/12/2009 - 15:52 — Milian Wolff
The easiest would be to check that by an additional regexp. Something like:
Note: I did not test this, but the idea should be clear.
Thanks, Milian, for the code. Wed, 01/07/2009 - 00:29 — Alexandre de Oliveira (not verified)
Thanks, Milian, for the code. The code posted by Martin, however, doesn’t work well.
In the following string, it will not work:
It will close div but not p. That’s why the code tries to replace the $next-tag from the string, which doesn’t exist because it’s the end of the string and the div tag hasn’t been closed yet.
I made a work around, but have not checked extensively, I just need this quickly, so I have no time. Replace this
by this
I hope someone improves the code.
See you.
Hi Milian, nice snippet, but Wed, 04/02/2008 - 16:05 — Martin (not verified)
Hi Milian,
nice snippet, but it does not work always… e.g. if you got the following construct: <table><tr><td>asdasd</tr> I also added the standalone tag option for e.g. <img /> or <br /> I modified your code a little like this:
Now it returns: <table><tr><td>asdasd</td></tr></table>
Hi Martin! Great that my Sat, 04/05/2008 - 12:54 — Milian Wolff
Hi Martin! Great that my script is of at least some help.
I just wanted to add that you are missing
hrandinputin your$arr_single_tagsarray.Hi Milian, thanks for your Sat, 06/16/2007 - 12:12 — Michael (not verified)
Hi Milian,
thanks for your code snippet. However, there are two issues:
The function fails on self-closing tags, i. e.
<img />. For example,<img src="foo.png" />, will become<img src="foo.png">...more.<em>html</em>...</img>. I solved this by adding a switch in the FOR loop (case "img":...break; default: your original code).Is it possible to change the actual closing behavior? For example: Not close at the end of
$html, but close directly after the “false” opening tag occurs; or: remove the “false” opening tag from$html? I couldn’t build the necessarypreg_replacemyself, but maybe the for-loop can be used viastrposand friend?Schöne Grüße aus dem Süden der Republik!
Post new comment