Oprettet man. d. 02. marts 2009 kl. 13:24:20

kongknabe
kongknabe (13.000 point. Point ude: 1.965)

Sende mail i PHP...

Hej.

Forsøger at afsende en mail igennem PHP men løber ind i det problem at Arkiv kodningen går i ged nogle gange og ikke viser æ, ø og å rigtigt.

Har forsøgt at løse problemet ved at putte en header med charset=utf-8 på, men det lader ikke til at virke.

Min kode ser ud som følger:

$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = $besked; //mail body
$subject = $emne; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Type: text/plain; charset=utf-8\r\n";
   
mail($recipient, $subject, $mail_body, $header); //mail command :)

Skrevet man. d. 02. marts 2009 kl. 13:25:36| #1

bitkid
bitkid (21.071 point)
prøv at kaste en utf8_encode() omkring $besked og se om det ændrer noget.

Skrevet man. d. 02. marts 2009 kl. 13:36:24| #2

kongknabe
kongknabe (13.000 point)
Nu har jeg desværre ikke lige selv mulighed for at teste da jeg sidder med en Mac, men når jeg tester på www.hotmail.com lader det bare til at gøre problemet endnu større? :(

Skrevet man. d. 02. marts 2009 kl. 13:48:23| #3

arne_v
arne_v (1.005.623 point)
$mail_body = qp_encode($besked, true);

og

saet

"Content-Transfer-Encoding: quoted-printable"

i header.

Skrevet man. d. 02. marts 2009 kl. 13:53:54| #4

kongknabe
kongknabe (13.000 point)
Altså, som følger?:

$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = qp_encode($besked, true);//mail body
$subject = qp_encode("$name siger hejsa", true); //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Transfer-Encoding: quoted-printable";
   
mail($recipient, $subject, $mail_body, $header); //mail command :)

Skrevet man. d. 02. marts 2009 kl. 13:58:09| #5

bitkid
bitkid (21.071 point)
arne_v mener quoted_printable_encode()

Men ellers har han ret :-)

Skrevet man. d. 02. marts 2009 kl. 13:59:04| #6

arne_v
arne_v (1.005.623 point)
Nej.

Den her metode er til body ikke til subject.

Er det subject du vil have danske bogstaver i?

Skrevet man. d. 02. marts 2009 kl. 14:00:35| #7

arne_v
arne_v (1.005.623 point)
Hvis du vil encode subject skal du bruge:

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

Skrevet man. d. 02. marts 2009 kl. 14:02:10| #8

arne_v
arne_v (1.005.623 point)
Hvis man er paa 5.3 saa quoted_printable_encode() ja.

Ellers:

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;
}

Skrevet man. d. 02. marts 2009 kl. 14:04:10| #9

kongknabe
kongknabe (13.000 point)
Hmm.. Jeg vil bare sikre mig at alt ser ud som det skal uanset hvilken email klient man bruger.. Da der er tekst hvor æ, ø og å kan forekomme både i emne, og besked tænker jeg at begge dele skal encodes!?

Da jeg er nybegynder vil jeg sætte stor pris på hvis der er en af jer der vil vise hvordan jeg skal gøre det i forhold til den kodestump jeg postede ovenfor.. Kan ikke helt overskue det :)

Selve hjemmesiden er encoded i utf-8 derfor tænker jeg at det også er det jeg skal bruge når jeg sender mailen ud. - Beskeden bliver taget fra et textarea, og emnet er skrevet direkte ind i kodestumpen ovenfor.

Skrevet man. d. 02. marts 2009 kl. 14:04:31| #10

bitkid
bitkid (21.071 point)
ahh... du havde lige glemt at sende funktionen med :-)

Det er ikke en standard php function.
Jeg havde ikke lige lagt mærke til at quoted_printable_encode var en php 5.3 function.

Skrevet man. d. 02. marts 2009 kl. 14:12:15| #11

arne_v
arne_v (1.005.623 point)
Hvis baade subject og body skal klare danske bogstaver skal begge encodes.

Skrevet man. d. 02. marts 2009 kl. 14:12:56| #12

arne_v
arne_v (1.005.623 point)
#10

Jeg copy paster bare fra noget tidligere kode.

Skrevet man. d. 02. marts 2009 kl. 14:55:40| #13

bitkid
bitkid (21.071 point)
#12 hehehe... den kendte copy/paste fejl ;-)

Skrevet man. d. 02. marts 2009 kl. 15:02:56| #14

kongknabe
kongknabe (13.000 point)
Der er ikke en af jer der kan hjælpe mig med at flette det ind i min kode herunder - kan ikke lige finde rundt i det :)


$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = $besked; //mail body
$subject = "En lille hilsen fra $navn" ; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Type: text/plain; charset=utf-8\r\n";

mail($recipient, $subject, $mail_body, $header); //mail command :)

Skrevet man. d. 02. marts 2009 kl. 15:03:41| #15

kongknabe
kongknabe (13.000 point)
Siden ligge ri øvrigt på one.com der kører med PHP 5 :)

Skrevet man. d. 02. marts 2009 kl. 15:32:16| #16

arne_v
arne_v (1.005.623 point)
$Name = $email; //senders name
$recipient = $friend_email; //recipient
$mail_body = qp_encode($besked); //mail body
$subject = header_encode("En lille hilsen fra $navn") ; //subject
$header = "From: ". $Name . " <" . $email . ">\r\n"; //optional headerfields
$header .= "Content-Type: text/plain; charset=utf-8\r\n";
$header .= "Content-Transfer-Encoding: quoted-printable";

og saa de 2 funktioner som er ovenfor

Skrevet man. d. 02. marts 2009 kl. 15:36:43| #17

kongknabe
kongknabe (13.000 point)
Altså følgende to funktioner:

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

og

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;
}

Skrevet man. d. 02. marts 2009 kl. 16:29:50| #18


Skrevet man. d. 02. marts 2009 kl. 17:19:01| #19

kongknabe
kongknabe (13.000 point)
Takker! :d

Men bør ISO-8859-1 så ikke erstattes med utf-8 i den første funktion?

arne_v - Smid et svar for point :)

Skrevet man. d. 02. marts 2009 kl. 18:00:38| #20

arne_v
arne_v (1.005.623 point)
argh

min qp_encode er ISO-8859-1 orienteret (eller ihvertfald enkelt byte charset orienteret)

prøv og brug UTF-8 men erstat qp_encode(x) med qp_encode(utf8_encode(x))

Skrevet man. d. 02. marts 2009 kl. 18:00:46| #21

arne_v
arne_v (1.005.623 point)
og et svar

Skrevet man. d. 02. marts 2009 kl. 18:06:25| #22

kongknabe
kongknabe (13.000 point)
Takker mange gange.. Det prøver jeg :)

Skrevet ons. d. 04. marts 2009 kl. 16:15:17| #23

kongknabe
kongknabe (13.000 point)
Nu fik jeg lige prøvet det af og det virkede ikke helt, men fandt ud af at udskifte din linje:

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

med:

return '=?UTF-8?B?' . base64_encode($str) . '?=\n';

Og nu virker det :)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Procentregning

Oprettet den 11. februar 2012 kl. 11.26
sevinding giver 60 point for svar | Giv et svar »

Ville ikke tildele at upload det til database eller komme...

Oprettet den 10. februar 2012 kl. 21.23
tobrukDk giver 15 point for svar | Giv et svar »

HTTP Post XML og modtag svar

Oprettet den 10. februar 2012 kl. 17.55
mrkaynex giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger