I learned a nice way to shoot yourself in your own foot the other day: allowing the Full HTML input format to be used for nodes, that may appear in teaser lists, such as the frontpage. The rule of thumb of course is, to not allow this input format to be used by untrusted users, but even trusted users (like myself) can easily use it to accidentally mess things up.
Ok, what happened? I needed to put an HTML table into a node. More precisely, I needed to put it in front of the actual textual content and since the Filtered HTML input format does not support the table tag, Full HTML it was. Initially, all went well. The table would display correctly on the full node as well as on the teaser, until I added a hyperlink in the last row. Suddenly, the frontpage, displaying the teaser list of recently published content, turned into a garbled mess, while the full node view was still showing up properly.
I spent almost an hour, trying to figure out, what could have possibly been wrong with the link, till I realized, that it was not the link itself, that was faulty. The problem was instead, that it added just enough characters to the node to make the teaser view cut off the closing table tag.
Lesson learned: Using HTML tables in nodes is always evil, even for the experienced user. If you have to do it anyway, make sure to not allow Drupal to split nodes automatically in teaser view, based on character count. To hint a safe place, position the cursor either in front of or behind the table and click the "Split summary at cursor" button above the editing field, or insert a <!--break--> tag accordingly
UPDATE: Stupid me, seems like my problem was not actually caused by "Full HTML", but by a custom format, derived from it, which lacked the "HTML corrector" filter. Apparently, I disabled that filter, when the AdSense module started complaining about it having a bug. A nonsensical thing to begin with, since I don't even use it's replacement tags.
