[PHP/regex] Hoe beperkt witruimte uit html stream strippen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
_/-\o_ Deze topic is eerder op de avond gesloten omdat ik niet wist hoe ik een topic report moest maken en de klaarblijkelijk gestelde termijn van 45 minuten die hiervoor staat overschreed, waarvoor mijn nederige excuses _/-\o_

(Zie ook [rml][ PHP/MYSQL] "enters" uit template stream halen[/rml]). Ik gebruik - met dank aan Cavorka de volgende regex om alle enters uit de html te halen die ik naar de browser van de client stuur.
PHP:
1
$html = preg_replace ("'([\r\n])[\s]+'", "", $html);

Korte intro: ik haal een template op uit een database. Hier vervang ik {placeholders} met $php_variabelen. De templates zijn in een textarea bij te werken door de admin.

Crisp voorzag al de nodige problemen hierbij:
crisp schreef op 08 juli 2004 @ 21:23:
[...] Tevens moet je oppassen met alle whitespace strippen, je kan ook teveel eruit halen (denk aan textarea's en pre-blokken)
Groot gelijk natuurlijk, maar hoe los ik dat op?! Mijn kennis over regex is zeer minimaal. Kan iemand mij op weg helpen of verwijzen naar een goede tutorial. De search leverde naar wat ik kon zien niets op, maar ik kan er ook overheen gekeken hebben. In dat geval graag verwijzingen :)

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • SillyJW
  • Registratie: Januari 2002
  • Laatst online: 07-07 14:41

SillyJW

der Gemutlichkeit

In de FAQ staan wat dingetjes over regexpen. Ben er toevallig ook mee bezig, maar ik moet zeggen dat het lastig blijft. Dit artikel heeft me best aardig op weg geholpen.

[ Voor 28% gewijzigd door SillyJW op 09-07-2004 22:40 ]


Acties:
  • 0 Henk 'm!

  • muba
  • Registratie: April 2002
  • Laatst online: 19-10-2013

muba

Prince of Persia!

Tevens wordt het als algemeen bekend/aanvaard beschouwd dat regular expressions, hoe cool en krachtig ze ook zijn, niet geschikt zijn voor het parsen van iets als HTML.

Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea


Acties:
  • 0 Henk 'm!

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

MUBA schreef op 09 juli 2004 @ 23:00:
Tevens wordt het als algemeen bekend/aanvaard beschouwd dat regular expressions, hoe cool en krachtig ze ook zijn, niet geschikt zijn voor het parsen van iets als HTML.
weet niet waar je dat vandaan hebt... hoe denk je dat expat werkt?

Steun Elkaar, Kopieer Nederlands Waar!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
$html = preg_replace (">[\r\n\s]<", "><", $html);

Zoiets misschien... Tis niet waterdicht (spaties en enters aan het begin en eind van de file worden overgeslagen), maar het werkt wel redelijk goed denk ik. Niet getest though.

offtopic:
Waarom een nieuw topic? :? Je oude topic dekt de lading van dit topic ook nog wel hoor...

[ Voor 25% gewijzigd door NMe op 09-07-2004 23:16 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan in je HTML ook < en > gebruiken, terwijl je officieel HTML entities moet gebruiken. Een RegEx in elkaar knutselen lijkt me dan ook onmogelijk.
Je moet eigen een tokenizer maken die de tekenreeks teken voor teken inleest en dan een array maakt;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
foo1<b>foo2</b>foo3

//
a[0]["value"] = "foo";
a[0]["type"] = "TEXT_NODE";

a[1]["value"] = "<b>";
a[1]["type"] = "OPEN_NODE";

a[2]["value"] = "foo2";
a[2]["type"] = "TEXT_NODE";

a[3]["value"] = "</b>";
a[3]["value"] = "CLOSE_NODE";

...


Ik heb een Tokenizer geschreven in JavaScript.

De code van die Tokenizer kan je hier downloaden.
Pagina: 1