Avatar billede morten_dyrekilde Nybegynder
12. marts 2009 - 00:10 Der er 6 kommentarer

php mailform, med danske bogstaver

Det burde være så nemt, men der er bare noget jeg ikke forstår åbenbart...

Jeg poster simpelt hen lige hele koden:

<?
$emailto = 'Min@adresse.dk;
$fejl = array();

if ($_SERVER["REQUEST_METHOD"]=='POST') {


    $ip = $_SERVER['REMOTE_ADDR'];
    $user_agent = $_SERVER["HTTP_USER_AGENT"];
    $name = @$_POST['name'];
    $email = @$_POST['email'];
    $subject = @$_POST['subject'];
    $headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=UTF-8\r\n";
    $headers .= "From: $name <$email>";
    $text = @$_POST['text'];
    $message = "



    <table>
    <tr>
    <td>Navn:</td><td>$name</td>
    </tr>
    <tr>
    <td>Mail:</td><td>$email</td>
    </tr>
    <tr>
    <td>Emne:</td><td>$subject</td>
    </tr>
    <tr>
    <td>Text:</td><td>$text</td>
    </tr>
    <tr>
    </tr>
    </table>
    </body>
    </html>";




    if (!$name)
$fejl[] = "Du glemte at udfylde dit navn.";
    if (!$email)
$fejl[] = "Du glemte at udfylde din mail adresse";
    if (!$subject)
$fejl[] = "Du glemte at udfylde emne.";
    if (!$text)
$fejl[] = "Du glemte at skrive en besked.";


    if (count($fejl)==0) {

$sendt = "Ja";
mail($emailto, $subject, $message, $headers);

  }
}
if ($sendt == "Ja") {
    echo "
<script type=\"text/javascript\">
setTimeout(\"window.location = 'URL TIL DER HVOR MAILFORMEN ER'\",0);
</script>
";
} else {
}


if (count($fejl)>0) {
  // Der er fejl
  echo '<p class="error">';
  echo join('<br />', $fejl);
  echo '</p>';
    }
?>
<h2>Kontakt via formularen herunder:</h2>


  <p><form action="index.php?side=kontakt" method="post" name="Sendmail" id="Sendmail">
    <table cellspacing="0" cellpadding="0" border="0" width="100%">
    <tr>
    <td height="5" colspan="2"></td>
    </tr>
    <tr>
    <td width="226"><p>Dit navn:</p></td>
    <td><input type="text" class="text" name="name" id="name" size="30"></td>
    </tr>
    <tr>
    <td><p>Din e-mail</p></td>
    <td><input type="text" class="text" name="email" id="email" size="30"></td>
    </tr>
    <tr>
    <td><p>Emne:</p></td>
    <td><input type="text" class="text" name="subject" id="subject" size="30"></td>
    </tr>
    <tr>
    <td valign="top" height="132"><p>Din besked:</p></td>
    <td height="132"><textarea name="text" class="textarea" cols="25" rows="6" id="text"></textarea></td>
    </tr>
    <tr> 
    <td height="40">&nbsp;</td>
    <td height="40" valign="bottom"><input type="submit" class="submit" name="Submit" value="Send mail">&nbsp;&nbsp;&nbsp; <input type="reset" class="submit" name="Reset" value="Slet alt"></td>
    </tr>
    <tr>
    <td colspan="2"><hr></td>
    </tr>
    </table>
</form>
</p>

Mit problem er at jeg ikke får ÆØÅ med i emne-feltet og navnefeltet. Det vil sige.. I oversigten i outlook eller hotmail kommer æøå ikke med, men i selve mailen er den fin nok. Jeg forstå simpelt hen ikke hvor problemet opstår, er der nogen der kan gennemskue problemet!?
Avatar billede morten_dyrekilde Nybegynder
12. marts 2009 - 00:10 #1
(ps - og hvor hvor blev PHP kategorien i øvrigt af? - kan ikke finde den længere :) )
Avatar billede arne_v Ekspert
12. marts 2009 - 00:19 #2
Headere skal encodes på en bestemt måde.

Se nedenstående eksempel for lidt detaljer:

<?php
ini_set('SMTP', 'smtp.myisp.com');
ini_set('smtp_port', 25);
function qp_encode($str, $wrap=true) {
    $res = '';
    for($i = 0; $i < strlen($str); $i++) {
        if(ord($str[$i]) < 128) {
            $res .= $str[$i];
        } else {
            $res .= sprintf('=%02X', ord($str[$i]));
        }
    }
    return ($wrap === true) ? wordwrap($res, 74, "=\n") : $res;
}
function header_encode($str) {
    return '=?ISO-8859-1?Q?' . qp_encode($str) . '?=';
}
function body_encode($str) {
    return qp_encode($str, true);
}
$from = 'someone@somewhere.dk';
$to = 'someone@somewhere.dk';
$subject = header_encode('Dette er en lille test af ÆØÅ');
$body = body_encode('Dette er en lille test af ÆØÅ');
$headers = "From: $from\r\n" .
          "Content-Type: text/plain; charset=ISO-8859-1\r\n" .
          "MIME-Version: 1.0\r\n" .
          "Content-Transfer-Encoding: quoted-printable";
mail($to, $subject, $body, $headers);
?>
Avatar billede arne_v Ekspert
12. marts 2009 - 00:19 #3
Avatar billede morten_dyrekilde Nybegynder
12. marts 2009 - 00:32 #4
Der er noget at arbejde med... Må nok erkende at jeg slet ikke befinder mig på et niveau hvor jeg kan gennemskue syntaksen!

(Hmm, har nok bare aldrig lagt mærke til kategorien var script.. Beklager jeg poster forkert :) )
Avatar billede arne_v Ekspert
12. marts 2009 - 03:14 #5
Kald header_encode funktionen på de header felter du vil bruge ÆØÅ i (og kopier de to funktioner ind), så bør det virke.
Avatar billede wiwdesign Nybegynder
16. marts 2009 - 23:53 #6
Lige for at tilføje...

Hvis ikke ovenstående virker så ændre:

function header_encode($str) {
    return '=?ISO-8859-1?Q?' . qp_encode($str) . '?=';
}

til:

function header_encode($str) {
    return '=?utf-8?Q?' . qp_encode($str) . '?=';
}
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

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