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 (externe link) op de HTML-mail los te laten. Dit geeft echter problemen als je bijvoorbeeld -style- tags in je code staan hebt. De strip_tags (externe link) 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 (externe link) 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 (externe link) 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 (externe link).

// 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 (externe link). Voor meer info over Spoon (externe link) kan je terecht op spoon-library.be (externe link).
Als je niet met Spoon werkt kan je hier natuurlijk ook altijd de standaard php functie html_entity_decode (externe link) 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 (externe link).)

 

Stijn
 

Door Stijn 03/02/10 (2 jaren 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 (2 jaren 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 (2 jaren 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 (1 jaar 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 (1 jaar 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 (1 jaar 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 (1 jaar geleden)
re: HTML naar plain text omvormen

Bedankt en een compliment!

Glemma Digital Creativity
 

Door Glemma Digital Creativity 03/03/10 (1 jaar 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 (1 jaar 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 (1 jaar 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 (1 jaar geleden)
re: HTML naar plain text omvormen

Bedankt! Erg interessante tip

Terrasoverkapping
 

Door Terrasoverkapping 13/04/10 (1 jaar 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 (1 jaar geleden)
re: HTML naar plain text omvormen

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

Auto Accessoires
 

Door Auto Accessoires 17/08/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Nice work and thx for sharing! We zullen dit een van de dagen eens in de praktijk proberen toepassen :)

Auto Accessoires
 

Door Auto Accessoires 17/08/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Knap gedaan weeral!
Heb deze week vakantie en er is dus tijd genoeg om te experimenteren :)
PS: waarom geven jullie geen boek uit, gebaseerd op jullie blog. Wat een schat aan informatie vind je hier zeg.. Had ik dat maar een aantal jaren eerder ontdekt :(

Jet
 

Door Jet 18/08/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Bedankt voor de hulp - Ik heb geprobeerd opnieuw het zelfde!
Anders, gebruik ik het gewoon in de editor. Maar dit kleine programma funtkioniert snel en betrouwbaar.
Nu dat alles verwijderd is, wat is html-code, ik wil zelfs goed, dan hoef je niet per ongeluk klikt u op slechte verbindingen (phishing en Co)

vriendelijke groeten
(En alsjeblieft excuus voor het slechte Nederlands - het is een Google-vertaling :-)

huidspecialist
 

Door huidspecialist 23/08/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Nice job! You go girl!!!
En euhm, over welk privé-project ging het hier precies Annelies?? Ben wel nieuwsgierig..

sim only abonnement
 

Door sim only abonnement 30/09/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Bedankt! ik denk dat dit veel mensen verder helpt!

simonly
 

Door simonly 12/11/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Ondersteund getPlainText ook html code?

Wijn bestellen
 

Door Wijn bestellen 17/11/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Werkt dit ook als je html code uit een database wilt strippen? bijvoorbeeld uit een datafeed?

Casual Dating
 

Door Casual Dating 17/11/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Bedankt voor het delen!
Alleen zou ik ook wel willen weten hoe dit werkt met een datafeed.

Verzekering
 

Door Verzekering 21/11/10 (1 jaar geleden)
re: HTML naar plain text omvormen

Tuurlijk werkt dit met een datafeed, die moet je echter wel eerst parsen.

Schmuck Ratgeber
 

Door Schmuck Ratgeber 12/01/11 (1 jaar geleden)
re: HTML naar plain text omvormen

Bedankt voor deze tip te delen, eens zien of mij ook kan helpen. Thanks for the good tipps and help

Tennisracket Kopen
 

Door Tennisracket Kopen 16/11/11 (2 maanden geleden)
re: HTML naar plain text omvormen

Bedankt voor het delen en ik zal eens kijken of ik hiermee aan de slag kan.

netlash
 

Door netlash 02/02/10 (2 jaren geleden)

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

webdesignblogs
 

Door webdesignblogs 02/02/10 (2 jaren geleden)

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

webdesignblogs
 

Door webdesignblogs 02/02/10 (2 jaren geleden)

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

jkivit
 

Door jkivit 24/02/10 (1 jaar geleden)

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

Reageer op dit bericht

Login

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