[PHP] Strip (X)HTML tags, scripts, newlines en whitespace

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 296662

Topicstarter
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:

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?

Acties:
  • 0 Henk 'm!

  • ixi
  • Registratie: December 2001
  • Laatst online: 22-02 12:05

ixi

Voordat je de preg_replace doet zoiets misschien?

PHP:
1
$string = str_replace("\n"," ",$string);


Ik ben geen held in regexps :) Wat is er mis met strip_tags?

Acties:
  • 0 Henk 'm!

Anoniem: 241683

Eerste vraag:
'@<![\s\S]*?--[ \t\n\r]*>@'
Deze apart toepassen in een preg_replace en dan als 2e argument een spatie?

Alleen voor die dingen zou ik http://www.php.net/str_replace die is daarvoor bedoeld en ook nog eens sneller.

Tweede vraag:

Het kan vast eens voorkomen dat dit gemaakt wordt: <<table> ik weet niet hoe dat geparst wordt, maar ik neem aan dat het wenselijk is dat dat ge-escaped wordt.
Dan moet je het onderstaande pattern even aanpassen.
@<[\/\!]*?[^<>]*?>@si'

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Nu online

MueR

Admin Tweakers Discord

is niet lief

Helemaal niks. Ik gok alleen dat TS deze functie uit de manual heeft overgeslagen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Leftblank
  • Registratie: Juni 2004
  • Laatst online: 19:56
MueR schreef op donderdag 14 januari 2010 @ 00:51:
[...]

Helemaal niks. Ik gok alleen dat TS deze functie uit de manual heeft overgeslagen.
Mijn gok is dat de TS ook sommige data in tags zelf weg wil hebben, zoals de code in een script tag, met enkel strip_tags kom je daar niet vanaf. Een combinatie tussen z'n replaces strip_tags zou wel 'n optie zijn uiteraard.

Wat ik me wel afvraag waarom je zowel HTML als UBB in de te parsen code hebt staan; het lijkt me dat die twee over 't algemeen mutually exclusive voorkomen?

Acties:
  • 0 Henk 'm!

Anoniem: 296662

Topicstarter
Leftblank schreef op donderdag 14 januari 2010 @ 01:16:
[...]
Mijn gok is dat de TS ook sommige data in tags zelf weg wil hebben, zoals de code in een script tag, met enkel strip_tags kom je daar niet vanaf. [...]
Klopt :)
Wat ik me wel afvraag waarom je zowel HTML als UBB in de te parsen code hebt staan; het lijkt me dat die twee over 't algemeen mutually exclusive voorkomen?
Standaard raad ik mensen aan UBB te gebruiken, maar er zijn er genoeg die per se een WYSIWYG editor willen gebruiken. Voor beide gevallen wil ik kunnen filteren. Zal uiteindelijk een argument van de functie worden (UBB = FALSE oid).

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Nu online

MueR

Admin Tweakers Discord

is niet lief

Leftblank schreef op donderdag 14 januari 2010 @ 01:16:
[...]

Mijn gok is dat de TS ook sommige data in tags zelf weg wil hebben, zoals de code in een script tag, met enkel strip_tags kom je daar niet vanaf. Een combinatie tussen z'n replaces strip_tags zou wel 'n optie zijn uiteraard.
Daarom gok ik dat de TS de manual page heeft overgeslagen. Daar staan nogal wat voorbeelden namelijk.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Maar een mail die begint met "hallo <b>geweldige</b> tweakerert" wordt dan "hallo tweakerert" en das toch niet wat je wilde?
Pagina: 1