Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Verwijder <p> (<br>) ( ) </p>

Pagina: 1
Acties:

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 20-11 11:19

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Heren,

Ik zit me helemaal het ongeluk te kloppen hier.

Ik heb een string met o.a. dit:

code:
1
2
3
4
5
6
7
8
9
tekst ...... <p><br>&nbsp;</p> ..... tekst....

of

tekst ...... <p><br></p> ..... tekst....

of

tekst ...... <p>&nbsp;</p> ..... tekst....


In ieder geval een paragraph met zouteloze inhoud. De regels worden afgebroken met \n voor zover ik weet.

Ik heb al tig verschillende reg-exes gebruikt, maar het blijft moeizaam. O.a. die van deze site:

http://stackoverflow.com/...move-empty-paragraph-tags

Doel
Zichtbaar lege regels/paragrafen verwijderen.

Professioneel Heftruck Syndroom


Verwijderd

Ik doe in Notepad++ altijd Ctrl+F (op <p><br></p> in dit geval), en dan "Vervangen door..." Bij de output van het vervangen gewoon niks zetten, dan verwijdert hij de gekozen items.

Vast niet de optimale methode, maar werkt wel voor mij.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

PHP:
1
preg_replace('#<p>(<br[\s/]*>|&nbsp;|\s)*</p>#Uis', '', $string);

Ongetest, maar zo moeilijk is 'ie toch niet? :)

[ Voor 3% gewijzigd door NMe op 30-07-2013 12:51 ]

'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.


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Hier staat meer info.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Scherp. :+

Dit probleem ga je inderdaad niet goed afgehandeld krijgen met regex cruft.
Gebruik een echte HTML parser, bouw een DOM tree, vindt lege nodes en sloop ze er uit, serialiseer het geheel terug naar een HTML string. Done.

En voor diegenen die daaraan twijfelen:

HTML: Dit is ook een 'visueel lege' paragraaf:
1
<p><span></span></p>


HTML: Dit ook:
1
<p><i></i></p>


HTML: En dit ook:
1
<p><i><b></b></i></p>


HTML: Maar ook dit:
1
<p><i><b></i></b></p>


HTML: Of laten we leuk gaan doen:
1
<p>foo<p><p></p>

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wat R4gnax zegt. Je zou met preg_replace_callback kunnen werken, daarmee <p>.*</p> ungreedy matchen, en in de callback-functie iets met strip_tags en &nbsp; doen.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Onzin. :) Bij een goed afgebakend probleemdomein kun je prima ook regexps gebruiken voor HTML. Dat het in 9 van de 10 gevallen voor het bewerken van HTML meer problemen dan oplossingen oplevert ben ik direct met je eens maar de topicstarter was redelijk duidelijk over hoe zijn lege regels eruit zien.

De oplossing van GlowMouse zou ook kunnen, maar als de lege regels zich beperken tot wat in de topicstart staat is een simpele preg_replace goed genoeg.

offtopic:
Ik vind sowieso dat Jeff Atwood soms nogal kort door de bocht gaat. Vrijwel alles is bij hem zwart of wit. Meestal is het niet zo simpel.

[ Voor 9% gewijzigd door NMe op 30-07-2013 13:27 ]

'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.


  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 20-11 11:19

NeFoRcE

Hallo? Bent u daar?

Topicstarter
Ik heb de regex geprobeerd, maar krijg geen matches? Het blijft vreemd want hij ziet er imo ook goed uit.

DevTool van Chrome laat o.a. deze structuur zien in de te vervangen tekst:

code:
1
2
3
4
<p>
  <br>
  "&nbsp;"
</p>


En @7050; het gaat om een php script, geautomatiseerd, niet in np++ zelf ;)

Professioneel Heftruck Syndroom


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Wat doen die quotes om die non-breaking space?

'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.


  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 20-11 11:19

NeFoRcE

Hallo? Bent u daar?

Topicstarter
NMe schreef op dinsdag 30 juli 2013 @ 13:38:
Wat doen die quotes om die non-breaking space?
Dat geeft aan dat
code:
1
&nbsp;
een string is aldus Chrome Developers Tool. Echter niet te zien in de pagina zelf omdat 't waarschijnlijk geparsed wordt als html.

Professioneel Heftruck Syndroom

Pagina: 1