Avatar billede LilleUdvikler Nybegynder
01. oktober 2011 - 10:15 Der er 22 kommentarer og
1 løsning

Mail problemer med æøå

Hejsa,

Jeg har sidder med kontakt formular, som laver ballade i ÆØÅ når min kunde skal modtage mailen, men ikke når jeg modtager mailen.

Har haft et andet spørgsmål åbent om samme emne, hvor jeg troede det var fixet - men det er det åbenbart ikke.

Alle filer er gemt som UTF-8 osv. min kode er her:

<?
$name=$_POST['name'];
$email=$_POST['email'];
$text=$_POST['text'];

if(isset($_POST['name'])&&isset($_POST['email'])&&isset($_POST['text'])){
    if($name===''){
        $errMsg = "Du skal udfylde navn";
    }
    elseif($email===''){
        $errMsg = "Du skal udfylde E-mail.";
    }
    elseif($text===''){
        $errMsg = "Du skal udfylde besked.";
    } elseif(is_numeric($name)){
        $errMsg = "Navn må ikke været tal";
    } elseif(is_numeric($text)){
        $errMsg = "Beskeden må ikke være tal";
    } elseif(strlen($text)<20){
        $errMsg = "Beskeden skal være over 20 tegn.";
    } else {
            $modtager = "simon@steenholm.dk";
            $emne = "Mail fra hjemmeside";
            $besked = "Hej, du har modtaget mail: \n
                                  Navn: " . $_POST['name']. "\n
                                E-mail: " . $_POST['email']. "\n
                                  Besked: " . $_POST['text'];
            $headers = $email;
            $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
           
            mail($modtager, $emne, $besked, $headers);
            echo "Emailen er sendt - jeg vil kontakte Dem hurtigst muligt.";
    }
}


?>
Avatar billede nemlig Professor
01. oktober 2011 - 10:48 #1
Har du en korrekt defination af Content-type i din input-formular?
Avatar billede LilleUdvikler Nybegynder
01. oktober 2011 - 11:01 #2
Er ikke helt med på, hvad du mener nemlig - men hele koden ser således ud og er i SAMME fil:

<div class='cb-header3'>   
    <h3 class='cb-header-h3'>Kontakt Simon direkte</h3>
</div>
<p>Ring på telefon <span style='font-size:16px;'>42 21 75 69</span></p>
<p>Eller udfyld formularen</p>

<?
$name=$_POST['name'];
$email=$_POST['email'];
$text=$_POST['text'];

if(isset($_POST['name'])&&isset($_POST['email'])&&isset($_POST['text'])){
    if($name===''){
        $errMsg = "Du skal udfylde navn";
    }
    elseif($email===''){
        $errMsg = "Du skal udfylde E-mail.";
    }
    elseif($text===''){
        $errMsg = "Du skal udfylde besked.";
    } elseif(is_numeric($name)){
        $errMsg = "Navn må ikke været tal";
    } elseif(is_numeric($text)){
        $errMsg = "Beskeden må ikke være tal";
    } elseif(strlen($text)<20){
        $errMsg = "Beskeden skal være over 20 tegn.";
    } else {
            $fint = array("æ", "Æ", "ø", "Ø", "å", "Å");
            $erstat = array("&aelig;", "&AElig;", "&oslash;","&Oslash;","&aring;","&Aring;");
       
            $modtager = "simon@steenholm.dk";
            $emne = "Mail fra hjemmeside";
            $besked = "Hej, du har modtaget mail: \n
                                  Navn: " . $_POST['name']. "\n
                                E-mail: " . $_POST['email']. "\n
                                  Besked: " . str_replace($erstat, $fint, $_POST['text']);
            $headers = $email;
            $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
           
            mail($modtager, $emne, $headers, $besked);
            echo "Emailen er sendt - jeg vil kontakte Dem hurtigst muligt.";
    }
}


?>

<?
if(isset($errMsg)){
    echo "<span style='color:#F00'>".$errMsg."</span>";
}
?>
<form action='?besked_sendt' method='post'>
    <div style='float:left;width:80px;'>
        <div style='padding:5px;'>Navn (*)</div>
        <div style='padding:5px;'>E-mail (*)</div>
        <div style='padding:5px;'>Besked (*)</div>
    </div>
    <div style='float:left;'>
        <div><input type='text' style='margin-top:5px;' name='name'></div>
        <div><input type='text' style='margin-top:5px;' name='email'></div>
        <div style='margin-top:3px;'><textarea name='text' rows='8' cols='25'></textarea></div>
        <input type='submit' value='Send'>
    </div>
</form>
</body>
</html>
Avatar billede LilleUdvikler Nybegynder
01. oktober 2011 - 11:02 #3
Nu har jeg så lavet et array til at fjerne de tegn som æøå er.. Venter bare lige på svar fra kunden om det fungere. Men hvorfor virker det ikke, hvor det br e er normalt sat op? :(
Avatar billede nemlig Professor
01. oktober 2011 - 12:22 #4
Du skal øverst i din kode med inputformularen angive DOCTYPE mm.
Fx. sådan her:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="da" lang="da">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />


På din måde styrer du hvordan browseren skal fortolke brugerens input.
Avatar billede olebole Juniormester
01. oktober 2011 - 16:02 #5
<ole>

@LilleUdvikler: At fjerne specialtegn er en hovedløs panikløsning. Hvis du vil lære at skrive webkode, bør du i stedet lære at behandle specialtegn  *o)

Gør følgende:
1) Skriv en korrekt UTF-8 meta i alle HTML/PHP dokumenter
2) Gem alle dine dokumenter med UTF-8
3) Bruger du data fra database(r), skal de(n) være sat til at bruge UTF-8
4) Modtager du data fra andre, skal disse være eksporteret som UTF-8

Derudover kan det være til stor hjælp at bruge f.eks. PHPMailer eller SwiftMailer

/mvh
</bole>
Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 08:31 #6
Hejsa,

Jeg HAR gemt alle dokumenter, som UTF-8 og med en META som er:

meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

på ALLE sider.
-----
Jeg har ikke tilføjet UTF-8 på min fil med form mailer i, da den er inkluderet i en normal fil, som HAR meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Avatar billede nemlig Professor
02. oktober 2011 - 08:53 #7
Der må være en fejl et sted. Du har gjort det rigtige. Hvad med at vise koden? Gætter på at der må være en fejl i koden. Du kan i øvrigt se i din browser, hvordan tegnsættet fortolkes. Tjek det, når din input-formular er indlæst.
Avatar billede olebole Juniormester
02. oktober 2011 - 12:39 #8
Har du også prøvet PHPMailer eller SwiftMailer?
Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 14:07 #9
Nej har ikke prøvet PHPMailer eller SwiftMailer. Kunne godt tænke mig, at finde ud af hvad filen der er galt. Jeg forstår det simpelthen ikke!

Her er min kode for kontakt.php :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Kontakt Simon for en foredragsoplevelse der inspirere</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name="description" content="Workshops at droppe krisen og leve livet. Kontakt Simon Steenholm her!" />
        <link rel="stylesheet" href="design/css/mainStyling.css" type="text/css" charset="utf-8">
    </head>
   
   
<body id='kontakt_body'>
   
<div id='wrapper'>
   
    <div id='header'>
        <?
            include("includes/header.php");
        ?>
    </div><!-- header slut -->
   
    <div id='main'>
        <div id='top'>
            <?
                include("includes/top_kontakt.php");
            ?>
        </div><!-- top slut -->
       
        <div id='content'>
                <h2>Kommentarer og spørgsmål er altid velkomne</h2>
            <div id='content_box_left'>
               
                    <div style='float:right;margin:10px -15px 0 5px;'><img src="design/img/widgetpic3.jpg" width="278" height="120" alt="Simon i en fitness maskine"></div>
               
                    <p>Simon Steenholm<br>
                    Drosselvej 57 C, 1. sal th. <br>
                    2000 Frederiksberg <br>
                    Telefon: 42 21 75 69 <br>
                    simon@steenholm.dk </p>
                    <p>Du er naturligvis også meget velkommen til at benytte formularen til højre, og jeg vil så kontakte dig hurtigst muligt, eller når du ønsker det.</p>
                   
                   
               
                </p>
            </div><!-- content-box-left slut -->
           
            <div id='content_box_right'>
                <?
                    include("includes/cb3.php");
                ?>
            </div><!-- content-box-right slut -->
           
        </div><!-- content slut -->
       
    </div><!-- main slut -->
    <div id='footer'>
        <?
            include("includes/footer.php");
        ?>
    </div><!-- footer slut -->

</div><!-- wrapper slut -->
   
</body>
</html>


----
Kan det have noget med, hvor domænet ligger at gøre? Det er hos one.com i hvert fald.
Avatar billede olebole Juniormester
02. oktober 2011 - 14:24 #10
Prøv med PHPMailer. Jeg ved, at mange andre spørgere med samme problem er blevet hjulpet.

Hvad er det for en kode, du viser i #9 - og hvordan hænger den sammen med koden i spørgsmålet og #2?
Avatar billede nemlig Professor
02. oktober 2011 - 14:38 #11
Skal også siges, at jeg anvender PHPMailer til mine email-scripts. Men jeg forstår godt, at du gerne vil have det til at virke med den rå kode.

Din kode er ikke helt valid - du kan tjekke den her:
http://validator.w3.org/#validate_by_input
Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 14:39 #12
Den hænger sammen sådan, at det er der min fil er inkluderet i? cb3.php er der hvor jeg har min kontakt formular i.

Du kan se det på: www.simonsteenholm.dk
Avatar billede nemlig Professor
02. oktober 2011 - 14:48 #13
Er din $header defineret korrekt:

Dette er klippet fra php.net:

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Additional headers
$headers .= 'To: Mary <mary@example.com>, Kelly <kelly@example.com>' . "\r\n";
$headers .= 'From: Birthday Reminder <birthday@example.com>' . "\r\n";
$headers .= 'Cc: birthdayarchive@example.com' . "\r\n";
$headers .= 'Bcc: birthdaycheck@example.com' . "\r\n";
Avatar billede nemlig Professor
02. oktober 2011 - 14:51 #14
Jeg vil mene, at dette her er mere korrekt:

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

Og du smider $email ind i $headers-variablen, men du har ikke defineret, hvordan denne emailadresse skal tolkes (To, From, CC osv,).
Avatar billede nemlig Professor
02. oktober 2011 - 15:03 #15
Avatar billede olebole Juniormester
02. oktober 2011 - 15:44 #16
De eneste obligatoriske felter i header'en er MIME-Version og Content-Type (husk i øvrigt, at HTTP-headers er case sensitive, og Content-Type staves med stort T).

Til gengæld er det nok en rigtig god idé at sende argumenterne i den rækkefølge, mail funktionen forventer at modtage dem i:


mail($modtager, $emne, $besked, $headers);

Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 17:22 #17
@olebole #16

Du siger at det type skal være med stort 'T'. Men ALLE tutorials der er det med småt? :)

Jeg har prøvet at sætte det i den rigtige rækkefølge OG tilsætte MIME-version. Lad os se om det fungere. Jeg giver lige besked om nogle timer :o)

Håber i gider hjælpe det.
Avatar billede olebole Juniormester
02. oktober 2011 - 19:43 #18
@LilleUdvikler: "Du siger at det type skal være med stort 'T'. Men ALLE tutorials der er det med småt?"

Det ved du forhåbentlig selv er noget vrøvl. Jeg kan vise masser, der gør det rigtigt - søg selv på Google. ALLE er et meget stort ord  *o)

Men du har da helt ret i, at rigtig mange kager rundt i tingene. Det understreger vel blot rigtigheden af min gamle kæphest: Skræmmende mange af de, der skriver tutorials, ved ikke det første om det, de skriver om!

Seriøse udviklere tjekker defor bare RFC'en  =)
Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 20:08 #19
Så fungere det hele - vil i ikke smide et svar hver? :)

MANGE gange tak for det :)
Avatar billede olebole Juniormester
02. oktober 2011 - 20:13 #20
Hvordan kom det til at fungere?

PS: Jeg samler ikke points
Avatar billede nemlig Professor
02. oktober 2011 - 20:20 #21
Jeg samler heller ikke, så læg selv et svar.
Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 20:27 #22
Satte dem i den rigtige rækkefølge, som olebole snakkede lidt,
Jeg tilføjede: $headers  = 'MIME-Version: 1.0' . "\r\n";
Og fik tilføjet: lang="da" xml:lang="da" - ved ikke om det hjalp.

Men det virker nu det hele nu i hvert fald. Så det er super duper :o)

Mange tak for hjælpen begge to.

Nu vil jeg kigge lidt på SwiftMail og PHPMailer. ;)
Avatar billede LilleUdvikler Nybegynder
02. oktober 2011 - 20:28 #23
Også lige et svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester