email form met vreemde tekens
Graag heb ik hulp nodig bij het volgende probleem.
Ik gebruik een php (zie onderstaande code) webformulier voor mijn e-mails. Als er een email binnenkomt van de website met speciale tekens zoals bijvoorbeeld è, of ç dan krijg ik andere rare symbolens/vreemde tekens binnen.
Nu heb ik het idee (opgezocht via google) dat dit aan het karakterset ligt van mijn php code. Ik moet ergens in mijn code vermelden dat er gebruik gemaakt moet worden van UTF-8?? Wie kan mijn helpen?
Dank je wel voor alle input!
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
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
if(!$_POST) exit;
$email = $_POST['email'];
//$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){
$error.="Invalid email address entered";
$errors=1;
}
if($errors==1) echo $error;
else{
$values = array ('company','email','name','address','message');
$required = array('company','email','name','address','message');
$your_email = "[email protected]";
$email_subject = "New Message Website: ".$_POST['subject'];
$email_content = "new message website:\n";
foreach($values as $key => $value){
if(in_array($value,$required)){
if ($key != 'subject' && $key != 'company') {
if( empty($_POST[$value]) ) { echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; }
}
$email_content .= $value.': '.$_POST[$value]."\n";;
}
}
if(@mail($your_email,$email_subject,$email_content)) {
echo 'Message sent!';
} else {
echo 'ERROR!';
}
}
?>
if(!$_POST) exit;
$email = $_POST['email'];
//$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS';
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){
$error.="Invalid email address entered";
$errors=1;
}
if($errors==1) echo $error;
else{
$values = array ('company','email','name','address','message');
$required = array('company','email','name','address','message');
$your_email = "[email protected]";
$email_subject = "New Message Website: ".$_POST['subject'];
$email_content = "new message website:\n";
foreach($values as $key => $value){
if(in_array($value,$required)){
if ($key != 'subject' && $key != 'company') {
if( empty($_POST[$value]) ) { echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; }
}
$email_content .= $value.': '.$_POST[$value]."\n";;
}
}
if(@mail($your_email,$email_subject,$email_content)) {
echo 'Message sent!';
} else {
echo 'ERROR!';
}
}
?>
Gewijzigd op 02/04/2012 13:19:19 door Ricardo van Schaik
Waarom $email aanmaken?
Haal je e-mailadres even uit je code.
Waarom @ voor je mailfunctie?
Ik mis zo'n beetje alle headers in je mail. Gebruik daarom liever bv phpmailer of swiftmailer.
Obelix en Idefix op 02/04/2012 13:01:19:
eregi is een vervallen functie.
Waarom $email aanmaken?
Haal je e-mailadres even uit je code.
Waarom @ voor je mailfunctie?
Ik mis zo'n beetje alle headers in je mail. Gebruik daarom liever bv phpmailer of swiftmailer.
Waarom $email aanmaken?
Haal je e-mailadres even uit je code.
Waarom @ voor je mailfunctie?
Ik mis zo'n beetje alle headers in je mail. Gebruik daarom liever bv phpmailer of swiftmailer.
Beste,
Ik moet eerlijk erbij zeggen, dat ik weining php kennis heb. Heb meer html kennis.
We hebben een template gekocht, en deze php formulier/code zat erbij, dat heb ik toen aangepast met mijn e-mail adres. Verder werkt het formulier wel alleen als ik een email binnen krijg met speciale tekens dan verandard dit in vage symbolen. Kun jij zeggen wat ik kan toevoegen aan mijn php code?
In ieder geval bedankt!
Groeten, Ricardo
Gewijzigd op 02/04/2012 13:20:33 door Ricardo van Schaik
De vraag van Ricardo is duidelijk en simpel, graag dus een antwoord op de vraag en niet een verhaal over wat beter kan en/of moet.
Bij voorbaat dank.
Voor mijn gastenboek gebruik ik een database, dat werkt feilloos.
Dit gaat over een emailformulier hetgeen dus direct verstuurd wordt.
Zoals Ricardo al aangaf schijnt daar "ergens" aangegeven te moeten worden dat er gebruik gemaakt moet worden van UTF-8.
Ik krijg regelmatig Duits-talige reacties en die worden nagenoeg onleesbaar door dit probleem.
Het gaat niet om de headers (dat begrijp ik al niet, dat zou moeten slaan op het traject dat een email aflegt, lees ik) maar juist om de message, het bericht.
Iemand typt b.v. als bericht:
Hallo, als erstes möchte ich eure tolle Seite sehr loben, habe sehr schöne kinderwagen aus den alten Zeiten gesehen und interessiere mich für einige.
lieben gruß.
Ik krijg binnen:
Hallo, als erstes möchte ich eure tolle Seite sehr loben, habe sehr schöne kinderwagen aus den alten Zeiten gesehen und interessiere mich für einige.
lieben gruß.
Nou is dit nog wel te herleiden maar als iemand zo een letter of letters in zijn/haar naam heeft wordt het een probleem.
Het gaat wel om de headers. De headers bepalen (onder andere) welke character set gebruikt moet worden om de tekens die zijn ingetikt te vertalen naar bytes. Als de headers verkeerd zijn dan wordt de verkeerde conversie gebruikt en krijg je dus een onleesbare tekst. Check de link van Santhe dus zou ik zeggen (vooral de laatste header).
Brengt ons weer terug naar de vraag van Ricardo: hoe of waar verwerk je dat in (bijvoorbeeld zijn) de code?
mail functie aan naar bijvoorbeeld:
Lees dus even de link van -SanThe- en de manual van mail door, dan komt het vast wel goed.
Om de headers in te stellen gebruik je het voorbeeld van -SanThe- , waarin duidelijk beschreven staat hoe de headers aan te maken (de $header variabele dus). Om het toe te passen op de code van Ricardo pas je op regel 30 e.v. van zijn voorbeeld de Code (php)
Lees dus even de link van -SanThe- en de manual van mail door, dan komt het vast wel goed.
http://php.net/manual/en/function.mail.php
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";
@Albert: De TO hoort niet bij de headers. Die zet je als eerste parameter bij de mail() function.
oh... ik heb dit eerder gebruikt maar dat scheen te werken.