Avatar billede miss-g Seniormester
18. marts 2018 - 13:24 Der er 6 kommentarer og
1 løsning

Æ, ø og å i mailformular

Når jeg modtager e-mails fra min side mangler der æ, ø og å. Det ser sådan ud:

Navn:
Jørgen

Email:
hej@mail.dk

Emne:
æøå

Message:
besked med øåæ

Jeg kan ikke selv programmere, så hvis nogen kan angive, hvad jeg skal tilføje/rette - vil jeg blive meget glad, tak.

Koden der sender:
------------------------------
<?php

$errorMSG = "";

// NAME
if (empty($_POST["name"])) {
    $errorMSG = "Navn er påkrævet ";
} else {
    $name = $_POST["name"];
}

// EMAIL
if (empty($_POST["email"])) {
    $errorMSG .= "Email er påkrævet ";
} else {
    $email = $_POST["email"];
}

// MSG SUBJECT
if (empty($_POST["msg_subject"])) {
    $errorMSG .= "Emne er påkrævet ";
} else {
    $msg_subject = $_POST["msg_subject"];
}


// MESSAGE
if (empty($_POST["message"])) {
    $errorMSG .= "Besked er påkrævet ";
} else {
    $message = $_POST["message"];
}


$EmailTo = "kontakt@nicolin.dk";
$Subject = "Besked fra Syord.";

// prepare email body text
$Body = "";
$Body .= "Navn: \n";
$Body .= $name;
$Body .= "\n\n";
$Body .= "Email: \n";
$Body .= $email;
$Body .= "\n\n";
$Body .= "Emne: \n";
$Body .= $msg_subject;
$Body .= "\n\n";
$Body .= "Message:\n ";
$Body .= $message;
$Body .= "\n";

// send email
$success = mail($EmailTo, $Subject, $Body, "Fra: ".$email);

// redirect to success page
if ($success && $errorMSG == ""){
  echo "success";
}else{
    if($errorMSG == ""){
        echo "Noget gik galt :(";
    } else {
        echo $errorMSG;
    }
}

?>
Avatar billede olsensweb.dk Ekspert
18. marts 2018 - 13:51 #1
hvilke tegnsæt anvender du på siden ??
hvilke tegnsæt anvender du i mailen ??
du sender ikke nogle tegnsæt i din mail header, deri ligger fejlen


ref http://php.net/manual/en/function.mail.php
// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=iso-8859-1';

// Additional headers
$headers[] = 'To: Mary <mary@example.com>, Kelly <kelly@example.com>';
$headers[] = 'From: Birthday Reminder <birthday@example.com>';
$headers[] = 'Cc: birthdayarchive@example.com';
$headers[] = 'Bcc: birthdaycheck@example.com';



kig på denne function
ref http://php.net/manual/en/function.mail.php#108669
<?php
function mail_utf8($to, $from_user, $from_email,
                                            $subject = '(No subject)', $message = '')
  {
      $from_user = "=?UTF-8?B?".base64_encode($from_user)."?=";
      $subject = "=?UTF-8?B?".base64_encode($subject)."?=";

      $headers = "From: $from_user <$from_email>\r\n".
              "MIME-Version: 1.0" . "\r\n" .
              "Content-type: text/html; charset=UTF-8" . "\r\n";

    return mail($to, $subject, $message, $headers);
  }
?>

eller olebole's vertion
https://www.computerworld.dk/eksperten/spm/961816#reply_7937170
Avatar billede arne_v Ekspert
18. marts 2018 - 16:24 #2
Umiddelbart ligner det UTF-8 fortolket som ISO-8859-1 d.v.s. at jeg ville proeve at lable det UTF-8.
Avatar billede arne_v Ekspert
18. marts 2018 - 16:32 #3
Lidt over et aar siden lavede jeg den her som forsoeger selv at gaette charset.


<?php

class SmartMailer {
    // content types
    const TYPE_UNKNOWN = 100;
    const TYPE_TEXT = 101;
    const TYPE_HTML = 102;
    // character sets
    const CS_UNKNOWN = 200;
    const CS_USASCII = 201;
    const CS_ISO88591 = 202;
    const CS_UTF8 = 203;
    // default character set if 8 bit and not possible to guess
    private $default_cs;
    // constructor
    public function __construct() {
        $this->default_cs = SmartMailer::CS_UTF8;
    }
    // access default charcter set
    public function get_default_cs() {
        return $this->default_cs;
    }
    public function set_default_cs($cs) {
        cs_type_to_string($cs); // will throw exception if unknown character set
        $this->default_cs = $cs;
    }
    // convert content type code to actual content type string
    private function type_code_to_string($type) {
        switch ($type) {
            case SmartMailer::TYPE_TEXT:
                return "text/plain";
            case SmartMailer::TYPE_HTML:
                return "text/html";
            default:
                throw new Exception('Unsupported content type code ' . $type);
        }
    }
    // convert character set code to actual character set string
    private function cs_code_to_string($cs) {
        switch ($cs) {
            case SmartMailer::CS_USASCII:
                return "US-ASCII";
            case SmartMailer::CS_ISO88591:
                return "ISO-8859-1";
            case SmartMailer::UTF8:
                return "UTF-8";
            default:
                throw new Exception('Unsupported character set code ' . $cs);
        }
    }
    // attempt to guess content type
    private function guess_type($s) {
        $res = preg_match('#<(\w+).+</(\w+)#', $s, $matches);
        return ($res && ($matches[1] == $matches[2])) ? SmartMailer::TYPE_HTML : SmartMailer::TYPE_TEXT;
    }
    // attempt to guess character set
    private function guess_cs($s) {
        $s8bit = array_filter(str_split($s), function($c) { return ord($c) >= 128; });
        if(count($s8bit) == 0) return SmartMailer::CS_USASCII;
        $s8bitnbsp = array_filter($s8bit, function($c) { return ord($c) == 0xA0; });
        $s8bitlatin = array_filter($s8bit, function($c) { return ord($c) >= 0xC0; });
        if(count($s8bitnbsp) == 0 && count($s8bitlatin) > 0) {
            return SmartMailer::CS_ISO88591;
        } else if(count($s8bitnbsp) > 0) {
            return SmartMailer::CS_UTF8;
        } else {
            return $this->default_cs;
        }
    }
    // header encode
    private function header_encode($hdr) {
        $hdrcs = $this->guess_cs($hdr);
        if($hdrcs == SmartMailer::CS_USASCII) {
            return $hdr;
        } else {
            return '=?' . $this->cs_code_to_string($hdrcs) . '?Q?' . quoted_printable_encode($hdr) . '?=';
        }
    }
    // email address encode
    private function email_address_encode($addr) {
        $addrparts = explode(' <', $addr);
        if(count($addrparts) == 2) {
            return $this->header_encode($addrparts[0]) . ' <' . $addrparts[1];
        } else {
            return $addr;
        }
    }
    // actual send
    public function send_email($from, $to, $subject, $body, $type = SmartMailer::TYPE_UNKNOWN, $cs = SmartMailer::CS_UNKNOWN) {
        $from = $this->email_address_encode($from);
        $to = $this->email_address_encode($to);
        $subject = $this->header_encode($subject);
        $type = ($type == SmartMailer::TYPE_UNKNOWN) ? $this->guess_type($body) : $type;
        $bodycs = ($cs == SmartMailer::CS_UNKNOWN) ? $this->guess_cs($body) : $cs;
        $contenttype = $this->type_code_to_string($type) . '; charset=' . $this->cs_code_to_string($bodycs);
        if($bodycs == SmartMailer::CS_USASCII) {
            $contentencoding = '7bit';
        } else {
            $contentencoding = 'quoted-printable';
            $body = quoted_printable_encode($body);
        }
        $headers = "From: $from\r\n" .
                  "Content-Type: $contenttype\r\n" .
                  "MIME-Version: 1.0\r\n" .
                  "Content-Transfer-Encoding: $contentencoding";
        mail($to, $subject, $body, $headers);
    }                 
}

?>


Indeholder emailen et mix of ISO-8859-1 og UTF-8 fordi man har et charset far PHP filen og et andet fra databasen, saa er man stadig totalt fubar.
Avatar billede miss-g Seniormester
18. marts 2018 - 17:04 #4
Jeg har nu tilføjet $headers, men det virker ikke, får stadig forkerte tegn. Hvordan skal det stå?

// To send HTML mail, the Content-type header must be set
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/html; charset=utf-8';

// prepare email body text
$Body = "";
$Body .= "Navn: \n";
$Body .= $name;
$Body .= "\n\n";
$Body .= "Email: \n";
$Body .= $email;
$Body .= "\n\n";
$Body .= "Emne: \n";
$Body .= $msg_subject;
$Body .= "\n\n";
$Body .= "Message:\n ";
$Body .= $message;
$Body .= "\n";

// send email
$success = mail($EmailTo, $Subject, $Body, "Fra: ".$email, implode("\r\n", $headers));

--------------------------------------------------
Min side bruger <meta charset="utf-8">
Avatar billede Zkyhndk Juniormester
19. marts 2018 - 09:23 #5
æ:  &aelig;
å: &aring;
ø: &oslash;

Hvis stort begyndelsesbogstav ønskes, så bare skriv:
&Aelig;
&Aring;
&Oslash;

Håber evt. dette kunne hjælpe dig :)
Avatar billede Zkyhndk Juniormester
19. marts 2018 - 09:24 #6
Bare glem mit svar, misforstod :D
Avatar billede miss-g Seniormester
19. marts 2018 - 13:50 #7
Fandt ud af, hvordan header skulle skrives via denne side http://netkoder.dk/netkoder/kode_email.php

Tak for hjælpen.
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