regex: html tag + inhoud verwijderen
Ik zit al een tijdje met de vraag waar ik geen goed antwoord op kan vinden...
Ik wil namelijk een html tag (uit bijvoorbeeld een html pagina) helemaal kunnen wissen.
Bijvoorbeeld alle <script> tags...
ik had al iets dergelijks als dit
Code (php)
1
2
3
2
3
<?php
$html = eregi_replace("<script([^>]+)>([^</script>]+)</script>","<script>...</script>",$html);
?>
$html = eregi_replace("<script([^>]+)>([^</script>]+)</script>","<script>...</script>",$html);
?>
Maar dit werkt nog niet echt...
wie kan mij hier mee verder helpen ??
Groeten,
Arian
strip_tags gebruiken. Toegestane tags kun je als extra argument meegeven.
Gewoon maar als ik bijvoorbeeld dit heb:
<script>
Blabla
</script>
en ik doe strip_tags, dan maakt hij er
Blabla van, en die bla bla moet óók weg!
Dus de inhoud van de hele tag moet dus mee worden verwijderd, en dat doet strip_tags niet...
Niet getest.
Als ik dan de g weg haal, doet laat hij gewoon alles staan...
zo dus..
Ik denk niet dat dat zo simpel gaat.. ga je uit van bijv. 100% valide HTML, of is het input van een gebruiker die de inhoud doelbewust kan manipuleren?
Als je zoekt naar bijv. <div>(.*?)</div> om te strippen, maar iemand vult dit in:
<div>tekst<div>tekst</div>tekst</div>
Bij het zoeken wordt: '<div>tekst<div>tekst</div>' gevonden, het laatste deel: 'tekst</div>' vind geen match.
Als het om input gaat, zou ik zeker voor htmlentities() gaan i.p.v. proberen de fout te herstellen. Je kunt ook bij het invoeren controleren of de opgegeven data tenminste 1 html tag bevat. Zo ja, sta dan de gebruiker niet toe het formulier 'op te slaan'.
het is uiteindelijk voor dat ik teksten uit een bepaalde html pagina wil, en dan zonder html, dus alleen teksten. Als je strip_tags doet, laat hij de inhoud van <script> tags ook nog staan, en dat lijkt niet zo mooi als dat later uitgelezen wordt als tekst, en er staat op eens javascript tussen.
Dus dacht ik, het is vast niet zo moeilijk om de inhoud tussen alle <script> en </script> tags te verwijderen..
dan ben ik daar alvast van af, en dan strip_tags erover, zodat ik echt dus alleen maar tekst overhoudt....
Volgens mij haalt Jan zijn scriptje gewoon alles wat tussen < en > staat weg, dus lijkt mij nog niet de juiste oplossing ;)
.*?</script>)"," ",$html);
?>
http://www.phpclasses.org/browse/package/4048.html
(in de functie Clean)
Groeten,
Arian