- You are here:
- WebsiteTips Home
- Articles, Tutorials, Tips
- Website Optimzation
- HTML Optimization with PHP
HTML Optimization: Crunch Your HTML with PHP
by Shirley Kaiser, SKDesigns
Published January 26, 2008. Copyright © 2008 Shirley E. Kaiser, M.A., SKDesigns and WebsiteTips.com. All rights reserved.
The PHP code below is an example of how to dynamically optimize your HTML server-side using PHP. This example uses the 'stripwhitespace' and 'stripBuffer' functions to remove extraneous whitespace (carriage returns, extra spaces).
This approach allows you to work with your HTMl markup formatted as you wish locally but automatically (dynamically) serve an optimized version to your site visitors - an ideal approach for many who prefer to work with multi-line HTML, those who don't want to manually add and remove extraneous whitespace whenever the HTML or content needs tweaking or updating, or all the above.
You are welcome to use the example PHP code shown below if desired. Note that the example below is fairly generic and you may need to add more rules or change some of the rules for your particular site to dynamically remove every single instance. This PHP code example is provided with the assumption that whoever uses it is already familiar with PHP.
Of course, in order for this to work, your server must be configured to use PHP, and you must be able to use PHP within your HTML files.
<?php
/* ---------------------------------
26 January, 2008 - 2:55pm:
<!-- http://websitetips.com/articles/optimization/html/crunch/ -->
Adapted for WebsiteTips.com by Shirley Kaiser, SKDesigns skdesigns.com.
The example below is adapted from a post by londrum 8:29 pm on June 7, 2007:
<!-- http://www.webmasterworld.com/php/3361456.htm -->
"crunch up your HTML into a single line
a handy little script..."
This PHP code goes at the very TOP of the PHP-enabled HTML webpage
above EVERYTHING else. Recommendation: use a PHP include file for this
to have only one file to maintain.
--------------------------------- */
function stripwhitespace($bff){
$pzcr=0;
$pzed=strlen($bff)-1;
$rst="";
while($pzcr<$pzed){
$t_poz_start=stripos($bff,"<textarea",$pzcr);
if($t_poz_start===false){
$bffstp=substr($bff,$pzcr);
$temp=stripBuffer($bffstp);
$rst.=$temp;
$pzcr=$pzed;
}
else{$bffstp=substr($bff,$pzcr,$t_poz_start-$pzcr);
$temp=stripBuffer($bffstp);
$rst.=$temp;
$t_poz_end=stripos($bff,"</textarea>",$t_poz_start);
$temp=substr($bff,$t_poz_start,$t_poz_end-$t_poz_start);
$rst.=$temp;
$pzcr=$t_poz_end;
}
}
return $rst;
}
function stripBuffer($bff){
/* carriage returns, new lines */
$bff=str_replace(array("\r\r\r","\r\r","\r\n","\n\r","\n\n\n","\n\n"),"\n",$bff);
/* tabs */
$bff=str_replace(array("\t\t\t","\t\t","\t\n","\n\t"),"\t",$bff);
/* opening HTML tags */
$bff=str_replace(array(">\r<a",">\r <a",">\r\r <a","> \r<a",">\n<a","> \n<a","> \n<a",">\n\n <a"),"><a",$bff);
$bff=str_replace(array(">\r<b",">\n<b"),"><b",$bff);
$bff=str_replace(array(">\r<d",">\n<d","> \n<d",">\n <d",">\r <d",">\n\n<d"),"><d",$bff);
$bff=str_replace(array(">\r<f",">\n<f",">\n <f"),"><f",$bff);
$bff=str_replace(array(">\r<h",">\n<h",">\t<h","> \n\n<h"),"><h",$bff);
$bff=str_replace(array(">\r<i",">\n<i",">\n <i"),"><i",$bff);
$bff=str_replace(array(">\r<i",">\n<i"),"><i",$bff);
$bff=str_replace(array(">\r<l","> \r<l",">\n<l","> \n<l","> \n<l","/>\n<l","/>\r<l"),"><l",$bff);
$bff=str_replace(array(">\t<l",">\t\t<l"),"><l",$bff);
$bff=str_replace(array(">\r<m",">\n<m"),"><m",$bff);
$bff=str_replace(array(">\r<n",">\n<n"),"><n",$bff);
$bff=str_replace(array(">\r<p",">\n<p",">\n\n<p","> \n<p","> \n <p"),"><p",$bff);
$bff=str_replace(array(">\r<s",">\n<s"),"><s",$bff);
$bff=str_replace(array(">\r<t",">\n<t"),"><t",$bff);
/* closing HTML tags */
$bff=str_replace(array(">\r</a",">\n</a"),"></a",$bff);
$bff=str_replace(array(">\r</b",">\n</b"),"></b",$bff);
$bff=str_replace(array(">\r</u",">\n</u"),"></u",$bff);
$bff=str_replace(array(">\r</d",">\n</d",">\n </d"),"></d",$bff);
$bff=str_replace(array(">\r</f",">\n</f"),"></f",$bff);
$bff=str_replace(array(">\r</l",">\n</l"),"></l",$bff);
$bff=str_replace(array(">\r</n",">\n</n"),"></n",$bff);
$bff=str_replace(array(">\r</p",">\n</p"),"></p",$bff);
$bff=str_replace(array(">\r</s",">\n</s"),"></s",$bff);
/* other */
$bff=str_replace(array(">\r<!",">\n<!"),"><!",$bff);
$bff=str_replace(array("\n<div")," <div",$bff);
$bff=str_replace(array(">\r\r \r<"),"><",$bff);
$bff=str_replace(array("> \n \n <"),"><",$bff);
$bff=str_replace(array(">\r</h",">\n</h"),"></h",$bff);
$bff=str_replace(array("\r<u","\n<u"),"<u",$bff);
$bff=str_replace(array("/>\r","/>\n","/>\t"),"/>",$bff);
$bff=ereg_replace(" {2,}",' ',$bff);
$bff=ereg_replace(" {3,}",' ',$bff);
$bff=str_replace("> <","><",$bff);
$bff=str_replace(" <","<",$bff);
/* non-breaking spaces */
$bff=str_replace(" "," ",$bff);
$bff=str_replace(" "," ",$bff);
/* Example of EXCEPTIONS where I want the space to remain
between two form buttons at */
/* <!-- http://websitetips.com/articles/copy/loremgenerator/ --> */
/* name="select" /> <input */
$bff=str_replace(array("name=\"select\" /><input"),"name=\"select\" /> <input",$bff);
return $bff;
}
ob_start("stripwhitespace");
?>
About the Author
Shirley Kaiser owns SKDesigns, a Web site design and development business she started in 1996. She specializes in accessibility-friendly, user-centered Web site design and graphics, Web standards, information architecture, Web site speed optimization, and collaborative team projects. Shirley writes weekly columns, has authored dozens of tutorials and articles related to graphics, Web site design, and the Internet, and writes a blog on Web design topics, Brainstorms and Raves. Shirley is also the editor and owner of WebsiteTips.com, a popular and valuable educational resource devoted to website owners, designers, and educators. In addition, Shirley is the author of Deliver First Class Web Sites: 101 Essential Checklists, published by SitePoint Pty. Ltd., July 2006.
Related Optimization Articles, Tutorials, Code Examples
- Crunch CSS with PHP - Code Example
- Crunch HTML with PHP - Code Example
- Ten Ways to Speed Up the Download Time of Your Web Pages
Related within Articles, Tutorials
Related within Web Site Resources
WebsiteTips.com's section of annotated links to many top-notch tutorials, tips, recommended books, and more.

