Avatar billede kongfjong Nybegynder
03. marts 2009 - 17:48 Der er 5 kommentarer og
1 løsning

Mailheaders og specielle tegn

Hej, jeg roder lidt med mail-funktionaliteten i PHP. Jeg har bygget en klasse op, der kan sende multipart-mails, med boundary-strenge osv, men jeg undrer mig lidt over hvordan den opfører sig og viser tegn som æ, ø og å.

Jeg troede det var nok at sætte denne header Content-Type: text/html; charset="utf-8", når den data jeg hev ud fra db var netop UTF-8 format, og resten af teksten var hard-coded.

Men jeg var nødt til at sætte en klassisk html-header på også, som denne <!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="en"><head><meta http-equiv="Content-Type" content="text/html; UTF-8" /></head>. Det overrasker mig naturligvis ikke med doctype osv. men mere at det skal "forklares" to gange til serveren at det er UTF-8 encoded data der sendes med i mailen.

Det sjove er, at tegn som bliver hardcoded, såvel æ, ø som å, vises korrekt i mailen, mens data der trækkes ud fra db'en, skal wrappes ind i htmlentities() med standard charset, altså ISO-8859-1, før de vises korrekt, på trods af at der altså er angivet UTF-8 to stedet i mailen.

Mail opbygningen ser således ud:

This is a multi-part message in MIME format. --==Multipart_Boundary_x002d71ae34b437bb29c76adee341e700x Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit

<Plain Text>

--==Multipart_Boundary_x002d71ae34b437bb29c76adee341e700x Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 7bit

<HTML'en>
<!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="en"><head><meta http-equiv="Content-Type" content="text/html; UTF-8" /></head><body>
text osv
</body>

--==Multipart_Boundary_x002d71ae34b437bb29c76adee341e700x--
<br />Headers: Date: Tue, 3 Mar 2009 17:29:40 +0100
From: Navn<mail@domain.dk>

Headers: Date: Tue, 3 Mar 2009 17:29:40 +0100
From: <FRA>
MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="==Multipart_Boundary_x002d71ae34b437bb29c76adee341e700x"

Kan nogen forklare mig, hvorfor i alverden det skal være sådan, og hvad der kan laves anderledes med henblik på f.eks. optimering?
Avatar billede andreas13_fam Nybegynder
03. marts 2009 - 20:01 #1
jeg ved ikke hvor meget det betyder når det er hardcode men har du også gemt filen i UTF-8, (nok uden BOM, da du har en PHP headder).
Avatar billede kongfjong Nybegynder
03. marts 2009 - 20:23 #2
Jeps, det har jeg :)
Avatar billede kongfjong Nybegynder
03. marts 2009 - 20:24 #3
Måske du hurtigt kan svare mig på, om der findes et program, eller en måde, hvorpå man kan se om en fil er gemt i ASCII, UTF-8 eller anden encoding, ud over at man selvfølgelig gør det i sin editor:)
Avatar billede arne_v Ekspert
04. marts 2009 - 03:36 #4
Egentligt ikke.

De samme N bytes kan nemlig være valide i flere forskellige encodings, men med forskelligt indhold.

Gem nogle kendte relevant tegn (f.eks. ÆØÅæøå) og kig på hex dump.

Men du skal have kendte tegn for at du kan sige det med sikkerhed.

Så er det muligt at lave et 95% sikkert gæt på ISO-8859-1 versus UTF-8 udfra fordelingen af byte værdier.

Jeg kan sikkert finde noget kode, hvis det er relevant.
Avatar billede kongfjong Nybegynder
11. april 2009 - 16:20 #5
Lig et svar arne;)
Avatar billede arne_v Ekspert
11. april 2009 - 18:03 #6
kommer her
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