mail() en htmlentities()

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jean Dreesen

Jean Dreesen

22/03/2014 14:11:56
Quote Anchor link
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.
 
PHP hulp

PHP hulp

30/11/2024 17:43:23
 
Ivo P

Ivo P

22/03/2014 15:45:41
Quote Anchor link
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....

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 &euml; geworden.
 
Jean Dreesen

Jean Dreesen

24/03/2014 16:15:01
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


En dit is de code voor testen.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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");
?>


- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Alvast bedankt!
Gewijzigd op 24/03/2014 16:19:05 door - Ariën -
 
Ivo P

Ivo P

24/03/2014 16:27:24
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.