mail() en htmlentities()
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.
Toevoeging op 22/03/2014 15:46:41:
dit duidt er trouwens wel op, dat de ë van België niet door htmlenitities() is gegaan, want dan was het ë geworden.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<!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>
<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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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");
?>
$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");
?>
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Alvast bedankt!
Alvast bedankt!
Gewijzigd op 24/03/2014 16:19:05 door - Ariën -
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.