PHP: Printing HTML-Friendly Code?

I am wondering if there is any technique out there for making HTML code look good when printing that HTML (multiple lines) from a PHP function?

In particular, new lines and tabs. Obviously, I want the HTML tags behind-the-scenes to look good with the proper new lines and tabs. However, depending on when I call the PHP function that is printing the HTML, I might need to start the tabs at 1, 2, 3, 4, etc. I don't want to have to pass the starting tab count to the PHP function that is printing the HTML.

So, does anyone know a general-purpose way to print HTML-friendly code with PHP? Or is there a design principle that I am missing that says, "Don't print multiple HTML lines from a PHP function." ...

Thanks,

Steve

Answers


Markup Cleanup

There are some wonderful codetools out there that will cleanup (ie, adjust spacing) and repair (ie, close open tags).

Tidy is one of the more popular html cleanup/repair tools. You can parse your script's output through Tidy on-the-fly using php's output buffers.

Zend Dev Zone Intro - http://devzone.zend.com/article/761 Tidy Docs in PHP Manual - http://www.php.net/manual/en/book.tidy.php

And now, a trivial example, yay!

<?php
ob_start();

echo '<div><b> messy</b> <div> <i>blarg</I></div>';
echo '  <div>code rawr!</div>';

$output = ob_get_clean();

$tidy = tidy_parse_string($output);
tidy_clean_repair($tidy);
echo $tidy;
?>
Templating System

You should be using a templating system to separate the logic (php code) and presentation (html/markup/etc) parts of your application.

Using this practice has many advantages including, among other things, making your code easier to maintain and debug.

This is a huge topic of discussion, and almost always goes into frameworks and MVC. There are thousands of resources, here are a few :P

Writing a Template System in PHP - http://www.codewalkers.com/c/a/Display-Tutorials/Writing-a-Template-System-in-PHP/ Separation of Business Logic from Presentation Logic in Web Applications - http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=21


I wouldn't bother. With DOM-inspection tools like Firebug readily available, there's no point wasting time on making something designed for a computer to read look good. See this question for other people's opinions on the matter too.


if you're generating valid xhtml, you can buffer your output and at the end, do that:

$dom = new DomDocument (('1.0', 'utf-8');
$dom->loadHtml (ob_get_clean ());
$dom->formatOutput = true; 
echo $dom->saveXML ();

if you're using a framework you can probably make this work as a plugin or filter. this way it's also work if you embed template into other template or use output from helper


Generating your HTML using a template system, and keeping your templates in order is a simple way of doing this


You shouldn't be printing html with php. Use php's shorthand syntax inside of a template.

<h1><?= $page_title ?></h1>
<p><?= page_content ?></p>

instead of

<?php

echo "<h1>" . $page_title . "</h1>";
echo "<p>" . $page_content . "</p>";

?>

Need Your Help

Catel ModelBase PropertyData deserialization

c# wpf wcf catel

Began to develop a WCF-WPF application.

MVC Windows Authentication App Attempting Anonymous Authentication

asp.net-mvc authentication

I am creating a new MVC application and trying to set up Windows authentication but when I attempt to log in it denies me.