GMail slaagt erin om elke email te strippen van alle opmaak en scripts, zodat ze de eerste zin(nen) van de email in het inbox-overzicht kan laten zien. Dit wil ik in mijn cms ook graag, en ik heb nu de volgende functie:
Dit werkt redelijk: de output van bovenstaande is
Zoals je ziet, zit er geen spatie tussen "content" en "met" en "tabellen" en "met". Hoe kan ik een verwijderde newline vervangen door een spatie?
En een tweede vraag: ik kan me voorstellen dat er een hoop zaken zijn waar je met een dergelijke functie rekening mee moet houden (foutief geformuleerde tags, bijvoorbeeld). Hebben jullie nog tips / opmerkingen over zaken waar ik rekening mee moet houden?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| $string = "<script>function doStuff() {}</script><p>Hier <b>mijn</b> content met newlines en <br> breaks en <table><tr><td>tabellen</td></tr> </table> met [p]UBB tags[/p]"; //echo strip_tags($string); function html2txt($string) { $search = array( '@<script[^>]*?>.*?</script>@si', // Strip out javascript '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@\[[\/\!]*?[^<>]*?\]@si', // Strip out UBB tags '@<style[^>]*?>.*?</style>@siU', // Strip style tags properly '@<![\s\S]*?--[ \t\n\r]*>@', // Strip multi-line comments including CDATA '%([\s]*[\r\n][\s]*)%' // Strip newlines ); $text = preg_replace($search, '', $string); return $text; } |
Dit werkt redelijk: de output van bovenstaande is
code:
1
| Hier mijn contentmet newlines en breaks en tabellenmet UBB tags |
Zoals je ziet, zit er geen spatie tussen "content" en "met" en "tabellen" en "met". Hoe kan ik een verwijderde newline vervangen door een spatie?
En een tweede vraag: ik kan me voorstellen dat er een hoop zaken zijn waar je met een dergelijke functie rekening mee moet houden (foutief geformuleerde tags, bijvoorbeeld). Hebben jullie nog tips / opmerkingen over zaken waar ik rekening mee moet houden?