Broken HTML

This document demonstrates WebLight's HTML testing capabilities and why you should test HTML. The issue report demonstrates how WebLight reports the problems below.

Unrecognized Tags

Browsers typically ignore elements that they do not recognize so unknown tags in documents typically result in some sort of change of presentation.

Example: <c> instead of <b>

Improper Element Nesting

HTML documents that are not structured correctly may not render predictably. Compare how the following code is rendered by Firefox 1.07, IE 5.2 for Mac and your browser.

Source

<table summary="Example table containing unexpected elements" border="1">
  <tr>
  <td>Column 1 Row 1</td>
  <p><code>p</code> in row 1 between column 1 and 2</p>
  <td>Column 2 Row 1</td>
  <p><code>p</code> in row 1 after column 2</p>
  </tr>
  <p><code>p</code> element between row 1 and row 2</p>
  <tr>
  <td>Column 1 Row 2</td>
  <td>Column 2 Row 2</td>
  </tr>
</table>

Firefox

Non-Conforming HTML Table Rendered by Firefox 1.07

Internet Exlorer 5.2 Mac

Non-Conforming HTML Table Rendered by IE 5.2

Your Browser

p in row 1 between column 1 and 2

p in row 1 after column 2

p element between row 1 and row 2

Column 1 Row 1 Column 2 Row 1
Column 1 Row 2 Column 2 Row 2

Unrecognized Attributes

Browsers typically ignore attributes that they don't recognize. You should be aware that if you use browser specific attributes, your documents will render differently when viewed with other browsers.

Example: stile="font-weight: bold;" should be style="font-weight: bold;"

Unrecognized Entities

HTML defines entities for some characters and symbols. Entities are referenced in HTML documents like &entity;. Browsers typically render entity references that they don't recognize as text.

Example: '&c;' &c; instead of '©' &copy;

It is important to understand that entities are expanded in attribute values (even if they are quoted). This combined with the fact that many CGI implementations use & as the parameter separator causes many problems. When a parameter name happens to be an HTML entity name the results are unpredictable.

Example: href=printreq.cgi?p=1©=2 should be href=printreq.cgi?p=1&copy=2