Problemer med Æ Ø Å i formmail!

Tags:    formmail php special characters formular

Jeg anvender koden fra phpFormmailer v2.6 til en formular, men outputtet i e-mail besvarelsen viser sære tegn i stedet for Æ Ø og Å. Er der nogle der har en idé om, hvordan man løser dette?

Min kode ser således ud:

<?php
/* PHP Form Mailer - easy, secure form mail:
phpFormMailer v2.6

last updated 2nd Dec 2009 - check back often for updates!
(easy to use and more secure than many cgi form mailers) FREE from:

www.TheDemoSite.co.uk

Should work fine on most Unix/Linux platforms
for a Windows version see: asp.thedemosite.co.uk
*/

// ------- three variables you MUST change below -------------------------------------------------------

$replyemail="vismic@mail.dk"; //change to your email address
$valid_ref1="http://www.groenthavedesign.dk/contact.html"; //chamge to your domain name
$valid_ref2="http://www.groenthavedesign.dk/contact.html"; //chamge to your domain name

// -------- No changes required below here -------------------------------------------------------------
//
// email variable not set - load $valid_ref1 page
if (!isset($_POST['email']))
{
echo "<script language=\"JavaScript\"><!--\n ";
echo "top.location.href = \"$valid_ref1\"; \n// --></script>";
exit;
}
$ref_page=$_SERVER["HTTP_REFERER"];
$valid_referrer=0;
if($ref_page==$valid_ref1) $valid_referrer=1;
elseif($ref_page==$valid_ref2) $valid_referrer=1;
if((!$valid_referrer) OR ($_POST["block_spam_bots"]!=12))//you can change this but remember to change it in the contact form too
{
echo '<h2>ERROR - not sent.';
if (file_exists("debug.flag")) echo '<hr>"$valid_ref1" and "$valid_ref2" are incorrect within the file:<br>
contact_process.php <br><br>On your system these should be set to: <blockquote>
$valid_ref1="'.str_replace("www.","",$ref_page).'"; <br>
$valid_ref2="'.$ref_page.'";
</blockquote></h2>Copy and paste the two lines above
into the file: contact_process.php <br> (replacing the existing variables and settings)';
exit;
}

//check user input for possible header injection attempts!
function is_forbidden($str,$check_all_patterns = true)
{
$patterns[0] = '/content-type:/';
$patterns[1] = '/mime-version/';
$patterns[2] = '/multipart/';
$patterns[3] = '/Content-Transfer-Encoding/';
$patterns[4] = '/to:/';
$patterns[5] = '/cc:/';
$patterns[6] = '/bcc:/';
$forbidden = 0;
for ($i=0; $i<count($patterns); $i++)
{
$forbidden = preg_match($patterns[$i], strtolower($str));
if ($forbidden) break;
}
//check for line breaks if checking all patterns
if ($check_all_patterns AND !$forbidden) $forbidden = preg_match("/(%0a|%0d|\\n+|\\r+)/i", $str);
if ($forbidden)
{
echo "<font color=red><center><h3>STOP! Message not sent.</font></h3><br><b>
The text you entered is forbidden, it includes one or more of the following:
<br><textarea rows=9 cols=25>";
foreach ($patterns as $key => $value) echo trim($value,"/")."\n";
echo "\\n\n\\r</textarea><br>Click back on your browser, remove the above characters and try again.
</b><br><br><br><br>Thankfully protected by phpFormMailer freely available from:
<a href=\"http://thedemosite.co.uk/phpformmailer/\">http://thedemosite.co.uk/phpformmailer/</a>";
exit();
}
}

foreach ($_REQUEST as $key => $value) //check all input
{
if ($key == "themessage") is_forbidden($value, false); //check input except for line breaks
else is_forbidden($value);//check all
}

$name = $_POST["name"];
$kan_bedst_lide = $_POST["kan_bedst_lide"];
$bruger_den_til = $_POST["bruger_den_til"];
$egne_ideer_til_forbedring = $_POST["egne_ideer_til_forbedring"];
$i_haven_føler_jeg = $_POST["i_haven_føler_jeg"];
$egne_ideer_til_forbedring = $_POST["i_haven_vil_jeg_gerne_opleve"];
$jeg_synes_mindst_om = $_POST["jeg_synes_mindst_om"];
$udendørs_spiseplads = $_POST["udendørs_spiseplads"];
$mange_mennesker_i_haven = $_POST["mange_mennesker_i_haven"];
$børn_i_haven = $_POST["børn_i_haven"];
$barns_børns_alder = $_POST["barns_børns_alder"];
$kaeledyr_i_haven = $_POST["kaeledyr_i_haven"];
$type_af_kæledyr = $_POST["type_af_kæledyr"];
$antal_kæledyr = $_POST["antal_kæledyr"];
$læsning = $_POST["læsning"];
$spille_lytte_til_musik = $_POST["spille_lytte_til_musik"];
$solbadning = $_POST["solbadning"];
$meditation = $_POST["meditation"];
$havearbejde = $_POST["havearbejde"];
$spil_og_leg = $_POST["spil_og_leg"];
$andre_aktiviteter = $_POST["andre_aktiviteter"];
$synlige_områder_indefra = $_POST["synlige_områder_indefra"];
$synlige_funktioner_indefra = $_POST["synlige_funktioner_indefra"];
$afslappet_havetype = $_POST["afslappet_havetype"];
$havetype_bliv_klogere_med_haven = $_POST["havetype_bliv_klogere_med_haven"];
$havetype_til_sociale_aktiviteter = $_POST["havetype_til_sociale_aktiviteter"];
$havetype_til_enkelthed_minimalisme = $_POST["havetype_til_enkelthed_minimalisme"];
$havetype_privatliv = $_POST["havetype_privatliv"];
$havetype_inspirerende_have = $_POST["havetype_inspirerende_have"];
$friheds_havetype = $_POST["friheds_havetype"];
$friheds_havetype = $_POST["friheds_havetype"];
$anden_havetype = $_POST["anden_havetype"];
$asiatisk = $_POST["asiatisk"];
$engelsk = $_POST["engelsk"];
$klassisk = $_POST["klassisk"];
$moderne = $_POST["moderne"];
$formel = $_POST["formel"];
$klinker = $_POST["klinker"];
$betonfliser = $_POST["betonfliser"];
$naturfliser = $_POST["naturfliser"];
$træbelægning_terrasse = $_POST["træbelægning_terrasse"];
$grus = $_POST["grus"];
$stål = $_POST["stål"];
$smedejern = $_POST["smedejern"];
$sand = $_POST["sand"];
$glas = $_POST["glas"];
$natursten = $_POST["natursten"];
$kurver = $_POST["kurver"];
$rektangler = $_POST["rektangler"];
$rustik = $_POST["rustik"];
$lineær = $_POST["lineær"];
$naturlig = $_POST["naturlig"];
$oval = $_POST["oval"];
$geometrisk = $_POST["geometrisk"];
$formel = $_POST["formel"];
$uformel = $_POST["uformel"];
$kvadratisk = $_POST["kvadratisk"];
$stier = $_POST["stier"];
$skraldespand_genbrugsopbevaring = $_POST["skraldespand_genbrugsopbevaring"];
$kompost_område = $_POST["kompost_område"];
$brændeopbevaring = $_POST["brændeopbevaring"];
$kløveplads = $_POST["kløveplads"];
$haveskur = $_POST["haveskur"];
$kæledyr = $_POST["kæledyr"];
$tørrestativ = $_POST["tørrestativ"];
$hegn = $_POST["hegn"];
$flagstang = $_POST["flagstang"];
$gangstier = $_POST["gangstier"];
$siddeplader_bænke = $_POST["siddeplader_bænke"];
$legeområde = $_POST["legeområde"];
$havebassin = $_POST["havebassin"];
$skulpturer = $_POST["skulpturer"];
$havebord = $_POST["havebord"];
$plads_til_sport = $_POST["plads_til_sport"];
$jacuzzi = $_POST["jacuzzi"];
$pergola = $_POST["pergola"];
$grill = $_POST["grill"];
$stativer = $_POST["stativer"];
$sauna = $_POST["sauna"];
$trapper = $_POST["trapper"];
$vandfigurer = $_POST["vandfigurer"];
$drivhus = $_POST["drivhus"];
$havelåge = $_POST["havelåge"];
$havebelysning = $_POST["havebelysning"];
$anden_havekunst = $_POST["anden_havekunst"];
$tørrestativ = $_POST["tørrestativ"];
$tørrestativ = $_POST["tørrestativ"];
$tørrestativ = $_POST["tørrestativ"];
$tørrestativ = $_POST["tørrestativ"];
$email = $_POST["email"];
$thesubject = $_POST["thesubject"];
$themessage = $_POST["themessage"];

$success_sent_msg='<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.groenthavedesign.dk/tak_haveanalyse.html">';

$replymessage = "Hi $name

Thank you for your email.

We will endeavour to reply to you shortly.

Please DO NOT reply to this email.

Below is a copy of the message you submitted:
--------------------------------------------------
Subject: $thesubject
Query:
$themessage
--------------------------------------------------

Thank you";

$themessage =
"DIN NUVÆRENDE HAVE

Kan bedst lide: $kan_bedst_lide
Bruger den til: $bruger_den_til
Ønsker at forbedre: $egne_ideer_til_forbedring
I min have føler jeg: $i_haven_føler_jeg
I min have vil jeg gerne opleve: $i_haven_vil_jeg_gerne_opleve
I min have synes jeg mindst om: $jeg_synes_mindst_om


DIN HAVES FUNKTIONER

Udendørs spiseplads: $udendørs_spiseplads
Mange mennesker i haven: $mange_mennesker_i_haven
Børn i haven: $børn_i_haven
Barnet eller børnenes alder: $barns_børns_alder
Er der kældedyr i haven: $kaeledyr_i_haven
Typen af kæledyr: $type_af_kæledyr
Antal kæledyr: $antal_kæledyr


HVAD BRUGER DU DIN HAVE TIL?

Læsning: $læsning
Spille eller lytte til musik: $spille_lytte_til_musik
Solbadning: $solbadning
Meditation: $meditation
Havearbejde: $havearbejde
Spil og leg: $spil_og_leg
Andre aktiviteter: $andre_aktiviteter


UDSIGT TIL HAVEN

Disse områder vil jeg gerne kunne se indefra: $synlige_områder_indefra
Disse funktioner vil jeg gerne kunne se fra visse vinduer: $synlige_funktioner_indefra


HVILKEN HAVETYPE PASSER TIL DIG?

Den afslappede havetype: $afslappet_havetype
Den frihedselskende havetype: $friheds_havetype
Typen der vil blive klogere med haven: $havetype_bliv_klogere_med_haven
Typen der kan lide sociale aktiviteter: $havetype_til_sociale_aktiviteter
Typen der kan lide enkelthed og minimalisme: $havetype_til_enkelthed_minimalisme
Typen der foretrækker privatliv i haven: $havetype_privatliv
Typen der kan lide en inspirerende have: $havetype_inspirerende_have
Anden havetype: $anden_havetype


HVILKEN HAVESTIL PASSER TIL DIG?

Asiatisk: $asiatisk
Engelsk: $engelsk
Klassisk: $klassisk
Moderne: $moderne
Formel: $formel


HAR DU SPECIFIKKE ØNSKER TIL BYGGEMATERIALER?

Klinker: $klinker
Betonfliser: $betonfliser
Naturfliser/Granit: $naturfliser
Træbelægning: $træbelægning_terrasse
Grus: $grus
Stål: $stål
Smedejern: $smedejern
Sand: $sand
Glas: $glas
Natursten: $natursten


HAR DU SPECIFIKKE ØNSKER TIL HAVENS FORMER?

Kurver: $kurver
Rektangler: $rektangler
Rustik: $rustik
Lineær: $lineær
Naturlig: $naturlig
Oval: $oval
Geometrisk: $geometrisk
Formel: $formel
Uformel: $uformel
Kvadratisk: $kvadratisk


HAR DU ELEMENTER DU ØNSKER AT INKLUDERE I HAVEN?

Stier: $stier
Skraldespand/Genbrugsopbevaring: $skraldespand_genbrugsopbevaring
Kompost område: $kompost_område
Brændeopbevaring: $brændeopbevaring
Kløveplads: $kløveplads
Haveskur: $haveskur
Kæledyr: $kæledyr
Tørrestativ: $tørrestativ
Hegn: $hegn
Flagstang: $flagstang


ER DER FUNKTIONER, DU ØNSKER AT INKLUDERE I HAVEN?

Gangstier: $gangstier
Siddepladser/Bænke: $siddepladser_bænke
Legeområde: $legeområde
Havebassin: $havebassin
Skulpturer: $skulpturer
Havebord: $havebord
Plads til sport: $plads_til_sport
Jacuzzi: $jacuzzi
Pergola: $pergola
Grill: $grill
Stativer: $stativer
Sauna: $sauna
Trapper: $trapper
Vandfigurer: $vandfigurer
Drivhus: $drivhus
Havelåge: $havelåge
Havebelysning: $havebelysning
Anden havekunst: $anden_havekunst
";



mail("$replyemail",
"$thesubject",
"$themessage",

"From: $email\nReply-To: $email");
mail("$email",
"Receipt: $thesubject",
"$replymessage",
"From: $replyemail\nReply-To: $replyemail");
echo $success_sent_msg;
/*
PHP Form Mailer - phpFormMailer (easy to use and more secure than many cgi form mailers)
FREE from:

www.TheDemoSite.co.uk */
?>

På forhånd mange tak for hjælpen :-)



8 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
hvilke charset anvender du på din side ?? ISO eller UTF-8
hvilke charset er dine sider gemt med (skal svare til det du anvender på din side)
alle dine includeret filer skal være gemt i samme charset

jeg kan ikke umildbart se de sette nogle charset så din browser viser det nok med ISO charset, filerne er iøvrigt gemt med UTF-8, men deres side er gemt med ISO :(
de anvender iøvrigt en del forældet tags (<center> <font>...)
deres side er dybt invalid


jeg tror jeg vil kigge på en anden PHP form mail eller anvende en class
kig på

http://swiftmailer.org/
http://phpmailer.worxware.com/


nb: en lille hint tryk på ? her i editor vinduet, så kna du se hvilke bb coder der kan anvendes, det kna gøre dit indlæg nemmere at læse, hvis du havde havde pakket din code ind




Siden contact.html (med selve formularen) anvender UTF-8 via denne kode:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

contact_process.php (der håndterer outputtet) anvender også UTF-8 via denne kode:
$headers .= "Content-Type: text/html; charset=UTF-8";

Det er som sagt outputtet i mailen, der ikke kan vise ÆØÅ, så det er vel contact_process.php, der skal tilpasses, eller hvad?

Filerne skal så også gemmes i UTF-8 format, hvis jeg forstår dig korrekt...hvordan gør jeg helt konkret det?

P.S:
Jeg er klar over, at der er flere udgåede tags i koden, men jeg er desværre nødt til at bruge den, selvom den rent kodemæssigt, hverken er tidssvarende eller 100% efter bogen. Tak for hint om BB koder, det huske jeg til næste gang, jeg skal vise længere koder - og tak for hjælpen indtil videre :)



Indlæg senest redigeret d. 16.08.2012 12:16 af Bruger #17332

Siden contact.html (med selve formularen) anvender UTF-8 via denne kode:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

contact_process.php (der håndterer outputtet) anvender også UTF-8 via denne kode:
$headers .= "Content-Type: text/html; charset=UTF-8";

den del af coden er ikke vist, jeg har prøvet at downloade deres phpFormMailer.zip
deres vertion af contact.html har ikke det meta :( deres vertion af contact_process.php har heller ikke den linje du du skriver.

jeg har været en del på eksperten.dk og der har det problem været oppe mange gange
prøv feks denne søgning site:eksperten.dk olebole 2012 mail_utf8

her er løsningen
ref http://www.eksperten.dk/spm/961816 #3
Fold kodeboks ind/udPHP kode 

så dine mail(...) skal laves om til mail_utf8(...) og de 2 functioner skal være tilgængelige (jeg har dem liggende i en extern fil jeg includere), og kan du glemme alt om at skulle sætter headers externt

eller fra http://dk2.php.net/manual/en/function.mail.php
Fold kodeboks ind/udKode 



Det er som sagt outputtet i mailen, der ikke kan vise ÆØÅ, så det er vel contact_process.php, der skal tilpasses, eller hvad?

Ja


Filerne skal så også gemmes i UTF-8 format, hvis jeg forstår dig korrekt...hvordan gør jeg helt konkret det?

det er korrekt, formattet du gemmer i er en option i din editor vælg utf8 uden BOM uden at vide hvilke editor du anvender kan jeg ikke svare konkret hvordan du skal gører




Mine modificerede versioner af contact.html og contact_process.php finder du her: http://www.groenthavedesign.dk/contact.html
http://www.groenthavedesign.dk/contact_process.php (ved ikke helt om du kan se koden, eller din browser bare afvikler koden!)

Bare så jeg lige har styr på, hvad jeg helt lavpraktisk skal foretage mig:

1.
Tilføje funktionen "escapeAddr" og "mail_utf8" (fra www.eksperten.dk) i toppen af contact_process.php
eller i en ekstern fil.

2.
Ændre de steder i koden hvor der står "mail(...) til mail_utf8(...)

3.
Jeg skal fjerne denne kode fra contact_process.php: $headers .= "Content-Type: text/html; charset=UTF-8";

Min editor er Dreamweaver, og der må vel være et sted, hvor jeg kan vælge utf8 uden BOM, når jeg arkiverer filerne.

Jeg takker igen for al hjælpen, dejligt at du tager dig tid til det. Jeg beklager, hvis mine spørgsmål er på børnehave niveau, men jeg er forholdsvis uerfaren i php-kodning :-)



Indlæg senest redigeret d. 17.08.2012 10:36 af Bruger #17332

(ved ikke helt om du kan se koden, eller din browser bare afvikler koden!)

php sendes ikke til browseren, hvis webserveren kan fortolke php code, så nej jeg kan ikke se coden:)
det du kan gøre er at indsætte følgende line i toppen af php document:
Fold kodeboks ind/udKode 

se http://php.net/manual/en/function.highlight-file.php

det bevirker at jeg kan se din php code hvis jeg skriver
url?source
feks http://www.groenthavedesign.dk/contact_process.php?source
du skal dog være opmærksom på dette er en sikkerheds risiko, da alle kan se din source code, vær specielt opmærksom på der ikke står fortrolige oplysninger i source coden (username/pw), så denne linje må kun anvendes i udviklings øje med


Bare så jeg lige har styr på, hvad jeg helt lavpraktisk skal foretage mig:

1+2+3 = Ja :)


Min editor er Dreamweaver, og der må vel være et sted, hvor jeg kan vælge utf8 uden BOM, når jeg arkiverer filerne.

https://www.google.dk/search?q=dreamweaver+utf+8+without+bom

ref http://www.adobe.com/support/documentation/en/dreamweaver/mx2004/dwusing_errata/dwusing_errata2.html

Specifying Unicode forms
To specify Unicode document encoding for all new documents:

Select Edit > Preferences.

The Preferences dialog box appears.
Select the New Document category.
Select a document encoding type from the Document encoding pop-up menu.

If the document encoding form you select can have a Unicode form associated with it, the Unicode normalization form pop-up menu lets you select a Unicode form to include in all new documents you create. If there is no Unicode form that applies to the selected document encoding type, the Unicode normalization form pop-up menu is dimmed.
If applicable, select a Unicode form from the Unicode Normalization Form pop-up menu.
*To include the Byte Mark Order in the document, select the Include Unicode Signature (BOM) checkbox.

To modify the Unicode document encoding for a specific page:

Open the page whose Unicode encoding you want to modify.
Select Modify > Page Properties.

The Page Properties dialog box appears.
Select the Title/Encoding category.
From the Encoding pop-up menu, select the document encoding type you want to use.
If applicable, select a Unicode form from the Unicode Normalization Form pop-up menu.
*To include the Byte Mark Order in the document, select the Include Unicode Signature (BOM) checkbox.
Click the Reload button to update the page with the specified document encoding.


* dette flueben må IKKE være sat




Indlæg senest redigeret d. 17.08.2012 11:17 af Bruger #16075
Efter at have udført punkt 1,2 og 3 så fungerer det sørme!

Jeg har ikke foretaget mig noget i forhold til arkivering i utf8 uden BOM gennem Dreamweaver, men hvis det fungerer, er det vel heller ikke nødvendigt?

Dine instruktioner har ihvertfald fået ÆØÅ til at stå rigtigt i mailoutputtet, og det var hensigten med det hele. Så du er dagens mand i skysovs! :D



godt du fik det til at virke.
default format i nyere vertioner af Dreamweaver er vist nok UTF8.
BOM har ikke nogle betydning ifm mail, men hvis du senere skal bruge nogle functoner der afh af header feks header:location, session, cookie mv. så får du problemer




Ok, det har jeg skrevet mig bag øret. Tak for hurtig og effektiv support :-)



t