Ich habe mal damit etwas rumgespielt und bin jetzt eigentlich fertig. Krass. Da bekommt man einfach innerhalb kürzester Zeit nen echt guten Parser!
Hier ist mal der Code, vielleicht gibts ja noch irgendwas zu verbessern ?
$string = stripslashes($string);
$string = preg_replace("/<br.*?\/>\s*<br.*?\/>/i", '</p><p>', $string);
$allowedTags = array('span[style]','p[style]', 'strong', 'em', 'blockquote', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'address', 'ul', 'ol', 'li', 'a[href|target|title]', 'img[style|src|alt]', 'sub', 'sup', 'td[colspan|rowspan]', 'table', 'tr', 'tfoot', 'thead', 'tbody');
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.Allowed', implode(',', $allowedTags));
$config->set('CSS.AllowedProperties', array('text-align', 'color', 'background-color', 'text-decoration', 'float'));
$config->set('AutoFormat.RemoveSpansWithoutAttributes', true);
$config->set('AutoFormat.RemoveEmpty.RemoveNbsp', true);
$config->set('AutoFormat.RemoveEmpty', true);
$purifier = new HTMLPurifier($config);
echo $purifier->purify($string);
Alles anzeigen
Als Testcode habe ich mal den eingegeben (durch Tiny):
<table border="0">
<tbody>
<tr>
<td>Tabelle mit Spalten</td>
<td>Spalte</td>
</tr>
<tr>
<td>andere Spalte</td>
<td>nächste Spalte</td>
</tr>
</tbody>
</table>
<p><strong>Fetter Text</strong><em>, kursiv</em> <span style="text-decoration: line-through;">und durchgestrichen</span></p>
<blockquote>
<p>Zitat mit blockquote</p>
</blockquote>
<p style="text-align: left;">Textformatierung (left)</p>
<p style="text-align: right;">Textformatierung (right)</p>
<p style="text-align: center;">Textformatierung (center)</p>
<p>Textformatierung (block)</p>
<h2>Überschriften 1</h2>
<h4>wegseherh 4</h4>
<address>Address-Tag</address>
<ul>
<li>Liste</li>
<li>Ein Punkt</li>
<li>Zweiter Punkt</li>
</ul>
<ol>
<li>Nummerierte Liste</li>
<li>Ein Punkt</li>
<li>Zweiter Punkt</li>
</ol>
<p><a title="Titel zum Link" href="http://irgendeine.domain" target="_blank">Link</a></p>
<p> </p>
<p style="text-align: center;"><img src="http://www.forum-hilfe.de/images/misc/fh_logo.gif" alt="Alternativtext" width="236" height="93" /></p>
<p style="text-align: left;">Verschiedene Style-Sachen: <span style="color: #ff0000;">Textfarbe</span><span style="background-color: #008000;">, Hintergrundfarbe</span>,<sub> tiefgestellt</sub>, <sup>hochgestellt</sup></p>
<script type='text/javascript'>Schadcode hier rein</script>
Alles anzeigen
Das ganze scheint soweit zu funktionieren, Ergebnis ist folgendes:
<table><tbody><tr><td>Tabelle mit Spalten</td> <td>Spalte</td> </tr><tr><td>andere Spalte</td> <td>nächste Spalte</td> </tr></tbody></table>
<p><strong>Fetter Text</strong><em>, kursiv</em> <span style="text-decoration:line-through;">und durchgestrichen</span></p>
<blockquote> <p>Zitat mit blockquote</p> </blockquote>
<p style="text-align:left;">Textformatierung (left)</p>
<p style="text-align:right;">Textformatierung (right)</p>
<p style="text-align:center;">Textformatierung (center)</p>
<p>Textformatierung (block)</p>
<h2>Überschriften 1</h2>
<h4>wegseherh 4</h4>
<address>Address-Tag</address>
<ul><li>Liste</li> <li>Ein Punkt</li> <li>Zweiter Punkt</li> </ul>
<ol><li>Nummerierte Liste</li> <li>Ein Punkt</li> <li>Zweiter Punkt</li> </ol>
<p><a title="Titel zum Link" href="http://irgendeine.domain">Link</a></p>
<p style="text-align:center;"><img src="http://www.forum-hilfe.de/images/misc/fh_logo.gif" alt="Alternativtext" /></p>
<p style="text-align:left;">Verschiedene Style-Sachen: <span style="color:#ff0000;">Textfarbe</span><span style="background-color:#008000;">, Hintergrundfarbe</span>,<sub> tiefgestellt</sub>, <sup>hochgestellt</sup></p>
Alles anzeigen
Jetzt muss ich durch preg_replace (oder ne ähnliche Funktion) nur noch
<span style='text-decoration:line-through;'></span>
durch
ersetzen und das "text-align:center|left|right|block;" durch ne jeweilige Klasse.