*update*
<pre> tags got messy, and after much trying to get things to pad correctly, I gave up and opted for table/row/columns to handle my text padding/justification issues. Everything works great now.
Example:
// Let's list armor defenses
if ($howManyArmorDef>0) {
$part .= sprintf("<BR /><strong>Defenses</strong><BR />");
$part .= sprintf("<table>");
if ($data1["e"] > 0) { $part .= sprintf("<tr><td>%+d</td><td>[%s]</td></tr>", $data1["e"], $defType["e"]); }
if ($data1["f"] > 0) { $part .= sprintf("<tr><td>%+d</td><td>[%s]</td></tr>", $data1["f"], $defType["f"]); }
if ($data1["g"] > 0) { $part .= sprintf("<tr><td>%+d</td><td>[%s]</td></tr>", $data1["g"], $defType["g"]); }
if ($data1["h"] > 0) { $part .= sprintf("<tr><td>%+d</td><td>[%s]</td></tr>", $data1["h"], $defType["h"]); }
if ($data1["i"] > 0) { $part .= sprintf("<tr><td>%+d</td><td>[%s]</td></tr>", $data1["i"], $defType["i"]); }
if ($data1["j"] > 0) { $part .= sprintf("<tr><td>%+d</td><td>[%s]</td></tr>", $data1["j"], $defType["j"]); }
$part .= sprintf("</table>");
}