Ik probeer de inhoud van een formulier waarvan de tekstvelden speciale karakters bevatten, te versturen via mail(). Om de tekens correct weer te geven, gebruik ik htmlentities(). Als ik het test met print in plaats van mail(), lukt het en worden de tekens correct weergegeven. Gebruik ik echter mail(), dan zijn de tekens in de mail niet correct weergegeven. Het woord België wordt dan bijvoorbeeld BelgiÃ<< of iets dergelijks. De charset staat ingesteld op utf-8.
De karakterset waarmee je de mail verstuurt, staat kennelijk niet op utf-8, of je mail client waarmee je de mail leest kan dat niet aan....

[size=xsmall]Toevoeging op 22/03/2014 15:46:41:[/size]

dit duidt er trouwens wel op, dat de ë van België niet door htmlenitities() is gegaan, want dan was het &euml; geworden.

Bedankt voor de reactie. Het zou wel eens kunnen dat htmlentities() niet werkt. Ik heb het eens weggelaten en wat blijkt? De speciale tekens worden correct weergegeven. Hieronder staat de code voor de html-pagina:

<!DOCTYPE html>
<html lang="nl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test speciale tekens</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="testen.php">
<p><input type="text" name="textfield" /></p>
<p><input type="submit" name="Submit" value="Submit" /></p>
</form>
</body>
</html>


En dit is de code voor testen.php:

<?php 
$vorige_url=getenv("HTTP_REFERER");
if($vorige_url!="http://www.voorbeeld.be/test_speciale_tekens.htm"){
print "script niet bruikbaar buiten www.voorbeeld.be";
exit;
}
$headers="Content-Type:text/html;charset=UTF-8\r\n";
$headers.="From: [email protected]\r\n";
$headers.="Reply-To: [email protected]\r\n";
$headers.="MIME-Version:1.0\r\n";
$to="[email protected]";
$subject="Speciale tekens";
$formuliergegevens=$_POST["textfield"];
$bericht="<!DOCTYPE html>\r\n";
$bericht.="<html lang=\"nl\">\r\n";
$bericht.="<head>\r\n";
$bericht.="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n";
$bericht.="<title>Speciale tekens</title>\r\n";
$bericht.="</head>\r\n";
$bericht.="<body>\r\n";
$bericht.="<p>Resultaten speciale tekens: $formuliergegevens</p>\r\n";
$bericht.="</body></html>\r\n";
mail($to,$subject,$bericht,$headers);
header("location: http://www.voorbeeld.be/bedankt.htm");
?>


Ik zou die foutmelding aanpassen: de HTTP_REFERER is zonder problemen aan te passen, dus als jij verraadt dat je daarop controleert, maak je het de misbruiker alleen maar gemakkelijker.

Daarnaast:
kijk eens naar iets als PHPMailer. Dat maakt je script een stuk duidelijker en veiliger dan zelf met mailheaders lopen knoeien.

Je TO en FROM velden en Subject zeker niet ongecontroleerd met user-invoer vullen. (dat doe je niet, maar het is wel eens verleidelijk kennelijk om dat wel te doen.

Reageren