DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
PHP Function For Cleaning Up HTML And JavaSctipt Code
// This is a function for PHP scripts to clean up HTML code before outputting it.
// The function applies correct indentation to HTML/XHTML 1.0 and JavaScript
// And makes the output much more readable.
// You can specify the wanted indentation through the variable $indent
<?php
//Function to seperate multiple tags one line
function fix_newlines_for_clean_html($fixthistext)
{
$fixthistext_array = explode("\n", $fixthistext);
foreach ($fixthistext_array as $unfixedtextkey => $unfixedtextvalue)
{
//Makes sure empty lines are ignores
if (!preg_match("/^(\s)*$/", $unfixedtextvalue))
{
$fixedtextvalue = preg_replace("/>(\s|\t)*</U", ">\n<", $unfixedtextvalue);
$fixedtext_array[$unfixedtextkey] = $fixedtextvalue;
}
}
return implode("\n", $fixedtext_array);
}
function clean_html_code($uncleanhtml)
{
//Set wanted indentation
$indent = " ";
//Uses previous function to seperate tags
$fixed_uncleanhtml = fix_newlines_for_clean_html($uncleanhtml);
$uncleanhtml_array = explode("\n", $fixed_uncleanhtml);
//Sets no indentation
$indentlevel = 0;
foreach ($uncleanhtml_array as $uncleanhtml_key => $currentuncleanhtml)
{
//Removes all indentation
$currentuncleanhtml = preg_replace("/\t+/", "", $currentuncleanhtml);
$currentuncleanhtml = preg_replace("/^\s+/", "", $currentuncleanhtml);
$replaceindent = "";
//Sets the indentation from current indentlevel
for ($o = 0; $o < $indentlevel; $o++)
{
$replaceindent .= $indent;
}
//If self-closing tag, simply apply indent
if (preg_match("/<(.+)\/>/", $currentuncleanhtml))
{
$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
}
//If doctype declaration, simply apply indent
else if (preg_match("/<!(.*)>/", $currentuncleanhtml))
{
$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
}
//If opening AND closing tag on same line, simply apply indent
else if (preg_match("/<[^\/](.*)>/", $currentuncleanhtml) && preg_match("/<\/(.*)>/", $currentuncleanhtml))
{
$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
}
//If closing HTML tag or closing JavaScript clams, decrease indentation and then apply the new level
else if (preg_match("/<\/(.*)>/", $currentuncleanhtml) || preg_match("/^(\s|\t)*\}{1}(\s|\t)*$/", $currentuncleanhtml))
{
$indentlevel--;
$replaceindent = "";
for ($o = 0; $o < $indentlevel; $o++)
{
$replaceindent .= $indent;
}
$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
}
//If opening HTML tag AND not a stand-alone tag, or opening JavaScript clams, increase indentation and then apply new level
else if ((preg_match("/<[^\/](.*)>/", $currentuncleanhtml) && !preg_match("/<(link|meta|base|br|img|hr)(.*)>/", $currentuncleanhtml)) || preg_match("/^(\s|\t)*\{{1}(\s|\t)*$/", $currentuncleanhtml))
{
$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;
$indentlevel++;
$replaceindent = "";
for ($o = 0; $o < $indentlevel; $o++)
{
$replaceindent .= $indent;
}
}
else
//Else, only apply indentation
{$cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml;}
}
//Return single string seperated by newline
return implode("\n", $cleanhtml_array);
}
?>





Comments
Snippets Manager replied on Sat, 2010/05/22 - 8:15pm
//If closing HTML tag or closing JavaScript clams, decrease indentation and then apply the new level else if (preg_match("/<\/(.*)>/", $currentuncleanhtml) || preg_match("/^(\s|\t)*\}{1}(\s|\t)*$/", $currentuncleanhtml)) { $indentlevel--; $replaceindent = ""; for ($o = 0; $o < $indentlevel; $o++) { $replaceindent .= $indent; } // fix for textarea whitespace and in my opinion nicer looking script tags if($currentuncleanhtml == '' || $currentuncleanhtml == '') { $cleanhtml_array[$uncleanhtml_key] = $cleanhtml_array[($uncleanhtml_key - 1)] . $currentuncleanhtml; unset($cleanhtml_array[($uncleanhtml_key - 1)]); } else { $cleanhtml_array[$uncleanhtml_key] = $replaceindent.$currentuncleanhtml; } }Chris