Poolse tekst breekt mijn contact formulier
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:
Code (php)
1
2
3
4
2
3
4
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.
=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.
Ik verstuur de mail met de volgende header:
Enig idee wat hier aan de hand kan zijn?
Guido
Gewijzigd op 09/05/2019 23:18:40 door Guido -
Hoe ziet de rest van je mail script eruit? Gebruik je gewoon de platte mail() functie?
quoted-printable Content-Transfer-Encoding?
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:
Ehhhh... Ok dan!
Is dat eerste fragment niet gewoon een 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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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);
?>
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);
?>
Quote:
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.
Ehhhh... Ok dan!
Gewijzigd op 10/05/2019 10:46:07 door Thomas van den Heuvel
Bedankt voor jullie reactie!
Het betreft een WordPress plugin en ik gebruik deze functie om de ingevoerde tekst te sanitizen: https://developer.wordpress.org/reference/functions/sanitize_textarea_field/
In die hoedanigheid verstuur ik het dan ook weer.
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.
Ik ben daar zelf niet achter gekomen, maar een gebruiker van het formulier. Zie:
https://wordpress.org/support/topic/mobile-phones-dont-recognize-text-maybe-is-problem-with-polish-language-latin/page/2/#post-11514349
Guido
Gewijzigd op 10/05/2019 11:07:22 door Guido -
Je hebt het over sanitize_textarea_field. Maar volgens vscf-options.php is de sanitize_callback voor het Message-veld sanitize_text_field en niet sanitize_textarea_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
Toevoeging op 10/05/2019 15:03:59:
Trouwens, WordPress gebruikt PHP mailer voor het versturen van mail:
https://core.trac.wordpress.org/browser/tags/5.1.1/src/wp-includes/pluggable.php#L144
Heb alle validering / sanitizing eruit gesloopt maar nog steeds geen verschil.
Dus mogelijk dat het aan PHP mailer ligt.
Guido
Code (php)
1
2
2
register_setting( 'vscf-label-options', 'vscf-setting-9', array('sanitize_callback' => 'sanitize_text_field') );
// ^^^^^^^^^^^^^^^^^^^
// ^^^^^^^^^^^^^^^^^^^
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.
Gewijzigd op 10/05/2019 15:31:18 door Thomas van den Heuvel
Ja, voor het veld-LABEL. Niet voor de input. Alle invoer binnen WordPress behoort op deze manier gevalideerd te worden.
Maare, het blijkt inderdaad te liggen aan de Content-Transfer-Encoding.
Ik wist niet beter dat 8-bit de standaard was?!
Guido
Gewijzigd op 10/05/2019 15:25:59 door Guido -
Guido - op 10/05/2019 15:25:40:
Ik wist niet beter dat 8-bit de standaard was?!
Assumption is the mother of all f*ckups.
Quote:
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.
^ dit is em waarschijnlijk, maak van die 8bit eens quoted-printable zou ik zeggen.
Stond al in de eerste reactie :p.
Gewijzigd op 10/05/2019 15:32:21 door Thomas van den Heuvel
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?
Zou je kunnen aanpassen, en wellicht helpt weghalen ook. Misschien beter om dat alles of zoveel mogelijk aan het mailprogramma zelf over te laten?
Kijk ook eens hoe de mailtjes er uiteindelijk uitrollen. Welke headers bevatten die allemaal?
Gewijzigd op 10/05/2019 15:49:14 door Thomas van den Heuvel
X-Mailer: PHPMailer 5.2.22
Content-Transfer-Encoding: QUOTED-PRINTABLE
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Bedankt!
Guido