PHP Stripping Newlines

04 Oct 2005

If you're picky about the format of your HTML like me, you've most likely noticed that PHP strips newlines that exist immediately after a closing PHP tag. Try the following code:

  1.     <tr>
  2.         <td>
  3.             <?php echo 'TEST'; ?>
  4.         </td>
  5.     </tr>

You might be surprised to see that this outputs the following:

  1.     <tr>
  2.         <td>
  3.             TEST        </td>
  4.     </tr>

As PHP developers, most of us expect that anything not within a PHP block is left alone. After all, that's supposed to be the point of the opening and closing PHP tags. (This is the only exception of which I'm aware.) The expected output is as follows:

  1.     <tr>
  2.         <td>
  3.             TEST
  4.         </td>
  5.     </tr>

This has been mentioned on the NYPHP mailing list, but I don't remember seeing it discussed anywhere else, and no one could come up with a good reason for the behavior.

There is an explanation offered here in the manual:

Why does PHP do this? Because when formatting normal HTML, this usually makes your life easier because you don't want that newline, but you'd have to create extremely long lines or otherwise make the raw page source unreadable to achieve that effect.

If you're like me, you're probably a bit surprised to see that this annoying behavior is supposedly there to "make your life easier." I can't think of a situation where I would want this behavior. Am I missing something obvious?