Jump to content

Archived

This topic is now archived and is closed to further replies.

groover

To remove empty HTML tags

Recommended Posts

Hi everyone.

I would like to ask, how can I remove all the empty HTML tags from a user input?

I want to remove things like the following:

[code]
<b>&nbsp;</b>
<p align=center>\n&nbsp;\n</p>
<div><br>\n&nbsp;<i></i></div>
[/code]

How can I do it?

Thanks first.

Share this post


Link to post
Share on other sites
Try this:

[code]
<pre>
<?php

$tests = array(
### Empty.
'<b>&nbsp;</b>',
"<p align=center>\n&nbsp;\n</p>",
"<div><br>\n&nbsp;<i></i></div>",
'<font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>',
'<body></body>',
### Not Empty.
'<div>content</div>',
"<span>line\nbreak</span>",
'<b>a</b>',
);

function remove_empties ($matches) {
### Variableize the stuff between the tags.
$content = $matches[2];
### Remove all nbsps, empty tags, brs, and whitespace.
$content = str_replace('&nbsp;', '', $content);
$content = preg_replace('%<(\w+)[^>]*></\1>%', '', $content);
$content = preg_replace('%<br/?>%', '', $content);
$content = preg_replace('/\s/s', '', $content);
### If there is still content the tag innards are not empty,
### send back the original match. Otherwise, send empty.
return $content ? $matches[0] : '' ;
}

echo '<table border="1">';
foreach ($tests as $test) {
echo '<tr><td>', htmlentities($test), '</td>';
$test = preg_replace_callback('%
<(\w+)[^>]*>
(.*?)
</\1>
%xs', 'remove_empties', $test);
echo '<td>', htmlentities($test), '</td></tr>';
}
echo '</table>';
?>
</pre>
[/code]

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.