Door
Guido -
op 09-05-2019 22:53
gewijzigd op 09-05-2019 23:18
2.565 views
Hallo,
Ik heb een contactformulier en merk dat als ik een groot blok Poolse tekst (als 1 alinea) verstuur, deze onjuist in de e-mail naar beheerder komt te staan.
Voorbeeld van hoe de tekst dan weergegeven wordt:
C5=84skich artyku=C5=82=
=C3=B3w na stronie. Bardzo d=C5=82ugo szuka=C5=82em informacji przez Google=
na temat zachowa=C5=84 toksycznych w zwi=C4=85zku i zacz=C4=85=C5=82em szp=
era=C4=87 dopiero po zako=C5=84czeniu toksycznej relacji.
Echter, wanneer ik dezelfde tekst in meerdere alinea's verdeel en verstuur, ziet de e-mail er weer prima uit.
Maar goed als je character encoderingen niet kloppen maakt dat verder niet zoveel uit :p.
Alles wat er verkeerd ingaat komt er naar alle waarschijnlijkheid ook weer vernaggeld uit.
Mogelijk wordt de quoted-printable tekst gewoon weergegeven als tekst?
Of mogelijk kan de mail client hier niet mee overweg?
Of dus de character encodering gaat ergens mis en dan kan je mail client hier ook geen chocola meer van maken.
En quoted-printable proberen te serveren als 8bit gaat natuurlijk ook niet vliegen :p.
^ dit is em waarschijnlijk, maak van die 8bit eens quoted-printable zou ik zeggen.
Rijst wel de vraag: hoe ontstaat dat fragment precies, waar komt dit vandaan, en waarom behandel je het als 8bit?
Het fragment ziet er wel ok uit, maar er ontbrak waarschijnlijk een (initieel) =-teken. Als je wilt dat we bronmateriaal inspecteren besteed hier dan s.v.p. ook enige zorg aan. Het werkt doorgaans een stuk fijner bij het vormen van een plaatje als je ook echt alle puzzelstukjes hebt...
Het volgende ziet er Pools uit, geen idee wat het betekent:
<?php
ob_start();
?>=C5=84skich artyku=C5=82=
=C3=B3w na stronie. Bardzo d=C5=82ugo szuka=C5=82em informacji przez Google=
na temat zachowa=C5=84 toksycznych w zwi=C4=85zku i zacz=C4=85=C5=82em szp=
era=C4=87 dopiero po zako=C5=84czeniu toksycznej relacji.<?php
$content = ob_get_clean();
header('Content-Type: text/plain; charset=UTF-8');
echo quoted_printable_decode($content);
?>
artikelen op de site. Heel lang was ik op zoek naar informatie over het toxische gedrag van Googlen in een relatie en ik begon pas te zoeken nadat de toxische relatie was geëindigd.
Maar nogmaals, als ik een lange Poolse tekst als 1 alinea verstuur gaat het dus mis, maar als ik er enkele alinea's van maak, wordt het wel goed in de e-mail weergegeven.
Je hebt het over sanitize_textarea_field. Maar volgens vscf-options.php is de sanitize_callback voor het Message-veld sanitize_[color=#ff0000]text[/color]_field en niet sanitize_[color=#ff0000]textarea[/color]_field, die overigens nergens voorkomt?
Oftewel, ben je je textarea niet op de verkeerde manier aan het valideren (als een input veld)?
Daarnaast. Deze plugin heb je zelf geschreven?
Ik heb trouwens de ballen verstand van WordPress. Maar wat je zegt komt niet overeen met code als je het mij vraagt.
In het algemeen heeft het geen zin om een situatie te bestuderen waarvan je weet dat deze niet klopt.
Repareer de fout en kijk dan of het probleem nog speelt.
Nee, bestand options is iets anders, daar kun je onder meer de veld labels invoeren. En dat zijn normale text velden.
Maar voor zover ik kan nagaan is er juist geen fout in mijn script, en zoals eerder doorgegeven wordt de tekst prima weergegeven wanneer ik deze in enkele alinea's verdeel.
Maar het zou dus mogelijk (of waarschijnlijk) kunnen liggen aan hoe de sanitize_textarea_field ermee omgaat... maar daarvoor kan ik beter een thread openen op het WP forum.
Had in de tussentijd een simpel standalone-formulier gemaakt en alle Poolse teksten komen gewoon goed binnen. Dat versterkt mijn vermoeden dat het daar aan ligt..
Guido
[size=xsmall]Toevoeging op 10/05/2019 15:03:59:[/size]
EDIT: en als PHPMailer alles (standaard?) quoted-printable encode geef je nog steeds de verkeerde Content-Transfer-Encoding mee in jouw code.
Je stelt de encoding ook compleet buiten PHPMailer in, dus dat maakt het ook lastig voor PHPMailer om dit op te pikken.
De default encoding van PHPMailer is zelf quoted-printable blijkbaar. En deze wordt ook nergens expliciet ingesteld in de WP-code (middels $phpmailer->Encoding = 'xyz' ofzo). Maar jouw mail zegt vrolijk dat het 8bit is. Kan me voorstellen dat programma's die de mail moeten lezen dan in verwarring raken.
Heb je voor de gein al eens de source van zo'n mailtje bekeken? Welke headers zitten daar in?
En de instelling "de fout zit niet in mijn code" is natuurlijk geen fantastisch uitgangspunt. Je zult er echt van voor naar achteren doorheen moeten. De eerste steen die op mijn weg lag is wat mij betreft nog steeds een verkeerde manier van validatie van de textarea.
EDIT: ok labels, dat maakt dan dus geen biet uit.
En quoted-printable proberen te serveren als 8bit gaat natuurlijk ook niet vliegen :p.
^ dit is em waarschijnlijk, maak van die 8bit eens quoted-printable zou ik zeggen.
Ik was even vergeten dat er nog een script was, die z'n ding ook nog deed... PHP-mailer dus.
Ik had alle validatie / sanering uit mijn plugin gesloopt, maar zonder resultaat.
Dus als ik het goed begrijp zit er in dat PHP-mailer script iets wat dit veroorzaakt?
En om dat te "fixen" moest ik die Content-Transfer-Encoding wijzigen?