HTML naar plain text omvormen

2 februari 2010 door Annelies

StripperVoor het versturen van e-mails in een privé-project had ik een functie nodig die een HTML-mail kon omvormen naar een plain text mail. Meestal wordt dit gedaan door simpelweg de PHP functie strip_tags op de HTML-mail los te laten. Dit geeft echter problemen als je bijvoorbeeld -style- tags in je code staan hebt. De strip_tags functie zal de begin- en eindtags wel 'strippen' maar zal alles ertussen laten staan. En een plain text mail met p { font-size: 12px; } en dergelijke in is nu niet echt proper. Daarom heb ik dus de functie getPlainText gemaakt.

De functie:

getPlainText

De uitleg:

// replace break rules with a linefeed and make sure a paragraph also ends with a new line
Hier gaan we dus -br- tags vervangen door enters. En aangezien paragrafen ook moeten gescheiden worden van elkaar en meerdere paragrafen in de html op 1 regel kunnen staan zorgen we ervoor dat deze al in html vorm op verschillende lijnen staan.

// remove tabs
De tabs die door indentatie in de html-code staan mogen in de plain-text versie ook verwijderd worden.

// remove the head- and style-tags and all their contents
De reden waarom deze functie geschreven is. De strip_tags functie van php zal enkel de start- en eind-tags van deze elementen verwijderen, waardoor alles dat tussen deze tags staat behouden blijft. Door een preg_replace te doen van deze html-tags en hun inhoud is dit probleem opgelost.

// replace links with the inner html of the link with the url between ()
Indien je de parameter $includeAHrefs niet overschrijft met de waarde false zal deze regel de links in de html vervangen door de html die binnen de link staat met daarachter de url tussen haakjes. Dit zorgt ervoor dat links in je html-document niet verloren gaan, wat wel het geval is bij strip_tags.

// replace images with their alternative content
Hetzelfde voor de afbeeldingen. Deze regels zal de afbeelding vervangen door de alt parameter van het img-element.

// strip tags
En nu pas laten we de strip tags functie los op de tekst.

// replace 'line feed' characters with the 'carriage return/line feed' character pair
We vervangen de line feeds of "\n" karakters door het carriage return line feed paar zodat volgende regel kan uitgevoerd worden.

// replace double, triple, ... line feeds to one new line
Deze regel zorgt ervoor dat de overbodige witregels in de tekst vervangen worden door 1 witregel.

// decode html entities
Deze regel zal html entiteiten zoals é vervangen door hun plain text waarden (in dit geval dus é) door middel van de Spoon functie htmlentitiesDecode. Voor meer info over Spoon kan je terecht op spoon-library.be.
Als je niet met Spoon werkt kan je hier natuurlijk ook altijd de standaard php functie html_entity_decode gebruiken.

Een voorbeeld:

Als voorbeeld wou ik de Netlash nieuwsbrief van 21 januari even door deze functie halen.

Bekijk achtereenvolgens eens de originele nieuwsbrief, de plain text inhoud gemaakt met strip_tags en de plain text inhoud gemaakt met getPlainText.

Opmerkingen:

Zodat jullie ze niet meer moeten geven, enkele opmerkingen:

  • Niet alle html karakters worden goed vervangen.
  • Afhankelijk van de html code zullen er hier en daar toch nog meerdere witregels staan.
  • Het beste resultaat wordt natuurlijk nog altijd verkregen als je zelf de plain inhoud van je nieuwsbrief maakt.

Nog opmerkingen zijn uiteraard welkom :-)

Update (13/02/2010)

De nieuwe versie kan je hier vinden.
Het resultaat op de Netlash nieuwsbrief van 21 januari vind je hier.

Wat is er veranderd?

  • hoofdingen worden nu aangeduidt door **
  • lijst items worden aangeduidt met -
  • na hoofdingen, paragrafen en lijst items worden er witregels geplaatst
  • script elementen worden nu ook gestript zodat de functie niet enkel voor e-mail nieuwsbrieven geschikt is

Dit maakt het geheel nog beter leesbaar en zorgt voor een minimum aan opmaak.

 

(Deze blogpost is geschreven door Netlash webdevelopster Annelies, en verscheen eerst op haar persoonlijke blog.)

 

Stijn
 

Door Stijn 03/02/10 (5 maanden geleden)
re: HTML naar plain text omvormen

Mooi gemaakt!

Alleen heb ik nog opmerking.

Doordat je de links verwijderd uit je HTML mail, heb je geen uitgaande links meer in je text versie.

Het zou handig zijn mocht je de uitgaande links aanduiden en de links in tekst erbij zetten.

Bv.

Ik ben een link(1) in de nieuwsbrief

Waarbij je dan onderaan de links onderaan zet.

Links:
1. http://www.ikbeneenlink.be

Stijn
 

Door Stijn 03/02/10 (5 maanden geleden)
re: HTML naar plain text omvormen

En eventueel nog een opmerking zijn de titels (H1, H2, H3, ..) aan te duiden.

Met bv.
*Ik ben een titel*
/Ik ben een titel/

Andries Seutens
 

Door Andries Seutens 03/02/10 (5 maanden geleden)
re: HTML naar plain text omvormen

Mooi gemaakt, ik kon het niet laten om ook eens een poging te wagen. Dus bij deze: http://pastebin.com/f106d6d7b

Suzanne Thienpont
 

Door Suzanne Thienpont 11/02/10 (5 maanden geleden)
re: HTML naar plain text omvormen

Bedankt voor de functie. Het is veel handiger dan de strip_tags functie.

Bartjan Cazander
 

Door Bartjan Cazander 15/02/10 (5 maanden geleden)
re: HTML naar plain text omvormen

Normaal zou ik gewoon de tekst kopiëren naar notepad/kladblok, maar ik hoef dit dan ook vrijwel nooit te doen.
Ik zie op je persoonlijke blog dat je die "mooi bijpassende afbeelding" niet zelf hebt uitgezocht ;-)

Leenen Raf
 

Door Leenen Raf 18/02/10 (5 maanden geleden)
re: HTML naar plain text omvormen

Bedankt voor deze tip te delen, eens zien of mij ook kan helpen.

Dell A
 

Door Dell A 02/03/10 (4 maanden geleden)
re: HTML naar plain text omvormen

Bedankt en een compliment!

Glemma Digital Creativity
 

Door Glemma Digital Creativity 03/03/10 (4 maanden geleden)
re: HTML naar plain text omvormen

Goede code heb je gemaakt. Vooral dat de strip_tags niet meer gebruikt word. Ik heb dat probleem vaker gehad met een script dat ik maakte voor een mailinglist. Dit is een erg goede code en daarbij ook een erg goede uitleg! Mijn compliment!

Hamsterkäfig
 

Door Hamsterkäfig 10/03/10 (4 maanden geleden)
re: HTML naar plain text omvormen

Bedankt voor deze tip te delen, eens zien of mij ook kan helpen.

SIM Only
 

Door SIM Only 11/03/10 (4 maanden geleden)
re: HTML naar plain text omvormen

Bedankt voor het delen van je tips 'n' tricks, hier kan ik iets mee!

5235
 

Door 5235 15/03/10 (4 maanden geleden)
re: HTML naar plain text omvormen

Bedankt! Erg interessante tip

Terrasoverkapping
 

Door Terrasoverkapping 13/04/10 (3 maanden geleden)
re: HTML naar plain text omvormen

btw, voor witspaces kan je dus ook regular expressions (regex) gebruiken! maar desalnittemin werkt het zo ook. thx.

Mark
 

Door Mark 15/04/10 (3 maanden geleden)
re: HTML naar plain text omvormen

Dit heeft me al veel tijd bespaard! Bedankt voor het te delen.

netlash
 

Door netlash 02/02/10 (5 maanden geleden)

stript op het Netlash blog: http://www.netlash.com/blog/detail/html-naar-plain-text-omvormen

webdesignblogs
 

Door webdesignblogs 02/02/10 (5 maanden geleden)

HTML naar plain text omvormen - Blog - Netlash Webdesign: Voor het versturen… http://goo.gl/fb/W4Ly #webdesign

webdesignblogs
 

Door webdesignblogs 02/02/10 (5 maanden geleden)

HTML naar plain text omvormen - Blog - Netlash Webdesign: Voor het versturen… http://goo.gl/fb/27Bg #webdesign

jkivit
 

Door jkivit 24/02/10 (5 maanden geleden)

@fkoevoets: misschien interessant voor jullie http://www.netlash.com/blog/detail/html-naar-plain-text-omvormen

Reageer op dit bericht

Velden gemarkeerd met een sterretje (*) zijn verplicht. Je e-mailadres wordt niet getoond in je reactie. Wees vriendelijk.

 


Volg de Netlash-blog

Schrijf je in op onze maandelijkse e-mail nieuwsbrief.

Quicknav

Categorieën

Selectie