Je hebt helemaal gelijk. Nog een ding dat ik trouwens niet helemaal snap: Als ik de de text uit het post gedeelte met print_r() liet zien zag ik wel de hele string, terwijl in de query dus het tweede deel wegviel. Is er iemand die me kan uitleggen hoe ik dat moet plaatsen ten opzichte van een user agent die de verkeerde encoding gebruikt?
De useragent gebruikt gewoon de encoding die jij hem opgeeft. En als je geen encoding opgeeft, zal de user agent de default character set/encoding van het OS gebruiken. In veel gevallen zal dat windows-1252 zijn (een 8-bit character set die grotendeels compatible is met iso-8859-1).
Bij het posten van formulierdata zal de browser ook die bewuste character set gebruiken.
De é staat in windows-1252 en iso-8859-1 op code point 233 en dat levert in beide character encodings 1 octet op waarin de drie hoogste bits gevuld zijn. De letter b levert in de genoemde character encodings een octet op waarin de hoogste bit niet gevuld is.
Een dergelijke sequence van octetten is ongeldig in utf-8. Wanneer in een utf-8 encoded string een octet voorkomt, waarin de drie hoogste bits gevuld zijn, hoort dit octet gevolgd te worden door twee andere octetten waarin de hoogste bit gevuld is. De string die je voert aan je utf-8 MySQL tabel, is dus niet correct utf-8 encoded. MySQL reageert hierop door simpelweg de string af te kappen bij de ongeldige sequence. Een harde error - zoals gebruikelijk is bij iedere zichzelf respecterende XML parser - zou mijns inziens beter zijn geweest.
De functie htmlentities() is crap. Wanneer je gebruik maakt van iso-8859-1 is het grotendeels onnodig. Karakters als é, ë. maken gewoon deel uit van deze character set en hoeven dus niet ge-escaped te worden met een entity reference. Daarnaast is het mogelijk dat de content die de browser verzendt, reeds ge-escaped is. Opera bijvoorbeeld verzendt in een iso-8859-1 pagina het euro teken als & #8364;. Als je daar nog eens htmlentities() overheen gooit, wordt het & amp;#8364;. Een laatste nadeel van htmlentities() is, dat de meeste entity references niet werken in XML.
Wanneer je gebruik maakt van utf-8, lijkt het me al helemaal zinloos. In utf-8 beschik je immers over het hele Unicode repertoire aan karakters, dus waarom zou
je dan karakters gaan escapen.