Bestimmte HTML_Tags mit bestimmten Attributen erlauben

VanHellsehn

Erfahrenes Mitglied
Hi Leute,
Ich wollte in meiner Kommentar-Funktion gewissen HTML-Tags mit bestimmten Attributen erlauben. Also so wie Wordpress es macht.

Zum Beispiel mit Hilfe so eines Arrays:
PHP:
$array = array(
	'<b>',
	'<a href="" title="">',
	'<pre rel="">'
);

Nur bin ich mir noch nicht ganz sicher wie ich das ganze Realisieren soll. Ich denke man macht das ganze wie immer mit Regulären Ausdrücken, aber ich weiß nicht genau wie ich das damit umsetzten soll. Ich kann mit Regulären Ausdrücken umgehen doch fehlt mir die Idee.

Jemand eine Idee oder Hilfe?

PS: http://de.php.net/manual/en/function.strip-tags.php#82180 hier ist es ja so ähnlich wie ich es möchte nur das er bestimmte Attribute löscht und diese Attribute sind nicht Tag spezifisch.
 
äh - stimmt.

Du hast ja den "verkehrten" Ansatz.

Du könntest diesen Test machen
1) Eine kopie des Textes ziehen und mit dieser testen
2) mittel preg_replace alle erlaubten Funde durch "" ersetzen (Bei preg_replace kannst du ein Array mit Patterns mitgeben)
3) mittels preg_match prüfen ob noch Tags <tag>value</tag> gefunden werden. Wenn ja-> Text enthält ungültige Tags.
 
Dann ändere das ganze ein wenig

1) mittels preg_replace alle erlaubten Funde durch ein label fixen ersetzen (Bei preg_replace kannst du ein Array mit Patterns mitgeben)

2) mittels preg_repalce alle nicht gelabelten Tags entfernen

3) den Leabel wieder entfernen

bsp.
HTML:
<!-- erlaubt: <b> und <i> -->
<!-- Original -->
Hallo <b>Welt</b>, <i>ich darf</i> <href = "link">nicht hier sein</href>

<!-- Nach Schritt 1 ->
Hallo #b>Welt#/b>, #i>ich darf#/i> <href = "link">nicht hier sein</href>

<!-- Nach Schritt 2 ->
Hallo #b>Welt#/b>, #i>ich darf#/i> nicht hier sein

<!-- Nach Schritt 3 ->
Hallo <b>Welt</b>, <i>ich darf</i> <href = "link">nicht hier sein</href>
 
Das erreiche ich mit strip_tags(); ja auch nur mein größtes Problem ist es bestimmt Attribute bei bestimmten Elementen zu erlaube und bei anderen wiederum nicht.
 
Wie wäre damit - du parst dein Dokument mit einem XML-Parser und durchläufst die Baumstruktur Rekursiv. Dann durchläufst die Attribute und alle die nicht von dir erlaubt sind löschst du raus. Wenn du fertig bist generierst du den Output neu über den Parser.

Für jedes Element was gelöscht wurde kannst du ja eine kleine Meldung am Ende ausgeben.
 
Zurück