02. marts 2009 - 13:24
Der er
22 kommentarer og 1 løsning
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 :)
Annonceindlæg fra Kingston Technology
02. marts 2009 - 13:25
#1
prøv at kaste en utf8_encode() omkring $besked og se om det ændrer noget.
02. marts 2009 - 13:36
#2
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? :(
02. marts 2009 - 13:48
#3
$mail_body = qp_encode($besked, true); og saet "Content-Transfer-Encoding: quoted-printable" i header.
02. marts 2009 - 13:53
#4
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 :)
02. marts 2009 - 13:58
#5
arne_v mener quoted_printable_encode() Men ellers har han ret :-)
02. marts 2009 - 13:59
#6
Nej. Den her metode er til body ikke til subject. Er det subject du vil have danske bogstaver i?
02. marts 2009 - 14:00
#7
Hvis du vil encode subject skal du bruge: function header_encode($str) { return '=?ISO-8859-1?Q?' . qp_encode($str) . '?='; }
02. marts 2009 - 14:02
#8
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; }
02. marts 2009 - 14:04
#9
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.
02. marts 2009 - 14:04
#10
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.
02. marts 2009 - 14:12
#11
Hvis baade subject og body skal klare danske bogstaver skal begge encodes.
02. marts 2009 - 14:12
#12
#10 Jeg copy paster bare fra noget tidligere kode.
02. marts 2009 - 14:55
#13
#12 hehehe... den kendte copy/paste fejl ;-)
02. marts 2009 - 15:02
#14
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 :)
02. marts 2009 - 15:03
#15
Siden ligge ri øvrigt på one.com der kører med PHP 5 :)
02. marts 2009 - 15:32
#16
$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
02. marts 2009 - 15:36
#17
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; }
02. marts 2009 - 16:29
#18
Jep.
02. marts 2009 - 17:19
#19
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 :)
02. marts 2009 - 18:00
#20
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))
02. marts 2009 - 18:00
#21
og et svar
02. marts 2009 - 18:06
#22
Takker mange gange.. Det prøver jeg :)
04. marts 2009 - 16:15
#23
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 :)
Vi tilbyder markedets bedste kurser inden for webudvikling