Voor 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:
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).)


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
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/
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
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.
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 ;-)
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.
Door Dell A 02/03/10 (1 jaar geleden)
re: HTML naar plain text omvormen
Bedankt en een compliment!
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!
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.
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!
Door 5235 15/03/10 (1 jaar geleden)
re: HTML naar plain text omvormen
Bedankt! Erg interessante tip
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.
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.
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 :)
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 :(
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 :-)
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..
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!
Door simonly 12/11/10 (1 jaar geleden)
re: HTML naar plain text omvormen
Ondersteund getPlainText ook html code?
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?
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.
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.
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
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.
Door netlash 02/02/10 (2 jaren geleden)
stript op het Netlash blog: http://www.netlash.com/blog/detail/html-naar-plain-text-omvormen
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
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
Door jkivit 24/02/10 (1 jaar geleden)
@fkoevoets: misschien interessant voor jullie http://www.netlash.com/blog/detail/html-naar-plain-text-omvormen