array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/dev/null", "a") ); $process = proc_open("tidy -config html-tidy-config.cfg", $descriptorspec, $pipes); // Make sure the program started and we got the hooks... // Either way, get some source code into $source if (is_resource($process)) { // Feed untidy source into the stdin fwrite($pipes[0], $source); fclose($pipes[0]); // Read clean source out to the browser while (!feof($pipes[1])) { //echo fgets($pipes[1], 1024); $newsrc .= fgets($pipes[1], 1024); } fclose($pipes[1]); // Clean up after ourselves proc_close($process); } else { // Better give them back what they came with, so they don't lose it all... $newsrc = "\n" .$source. "\n"; } // Split our source into an array by lines $srcLines = explode("\n",$newsrc); // Get only the lines between the body tags $startLn = 0; while ( strpos( $srcLines[$startLn++], '