Hallo allemaal,

Ik wil een tekst filteren op de volgende manier:
Alle platte tekst <p> wil ik verwijderen. De koppen <h1> tot en met <h6> wil ik overhouden, inclusief wat daar staat.

Ik gebruik strip_tags(); maar er is meer nodig... Of moet ik juist een andere functie gebruiken?
Iemand tips?


<?php
$html = "<p>hier wat platte tekst die weg mag</p><h1>Deze kop moet bewaard blijven</h1><p>Dit mag weer weg.</p><h6>En deze heb ik ook nog nodig.</h6>";
$content = strip_tags($html);

echo $html;
?>
van PHP.net

allowable_tags
- You can use the optional second parameter to specify tags which should not be stripped. 




<?php
	$html = "<p>hier wat platte tekst die weg mag</p><h1>Deze kop moet bewaard blijven</h1><p>Dit mag weer weg.</p><h6>En deze heb ik ook nog nodig.</h6>";
	$content = strip_tags($html, '<h1><h2><h3><h4><h5><h6>');

	echo $html;
?>
Maar de tekst die tussen <p> staat blijft wel bestaan, alleen de opmaak verdwijnt. Hoe kan ik ervoor zorgen dat alle tekst tussen <p> weg wordt gehaald?
je string in $html wordt niet aangepast, maar wel in $content.
Het werkt, thanks!
Toch zou ik de regex niet zo opbouwen.
Als je het volgende hebt:
<h2>Kop 1</h2>
<p>blabla</p>
<h2>Kop 2</h2>
<p>blabla</p>
Dan zal het correct werken.
Zet je het op één regel, dan wordt het greedy matchen actief en hou je alleen kop 1 over. Specificeer dus altijd exact wat je wilt hebben. Uiteraard kun je in je regex ook een ? opnemen om non-greedy te matchen, maar dat voelt altijd als een hack.
>> Uiteraard kun je in je regex ook een ? opnemen om non-greedy te matchen, maar dat voelt altijd als een hack.

Waarom voelt dat aan als een hack?

>> Toch zou ik de regex niet zo opbouwen.

Oké, dat kan, maar veel interessanter is het dan natuurlijk om te weten hoe je het wél zou opbouwen ;-)
Kun je niet beter in plaats van alles te strippen wat je niet wilt (blacklist), selecteren wat je wel wilt (whitelist)?

EDIT: oftewel maak een regexp om alles van de vorm <hX*>*</hX> te vangen

Reageren