/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
æøå i subjektlinie.
Fra : Jonas Voss


Dato : 16-12-02 15:53

Jeg forsøger mig med at lave et script der sender mails via SMTP
istedet for sendmail, og det virker faktisk ganske fint.

Indholdet og subjekt til mailen bliver forfattet i en formular og
sendes til smtp-scriptet. Problemer er, at æøå i subjekt linien bliver
skrevet som X'ere, og ikke som æøå. Mailens indhold, med æøå, fungerer
fint.

Skal jeg have Mr. preg_replace() på banen, eller kan man klare det på en
anderledes smart måde.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

   If you're not part of the solution,
   you're part of the precipitate.   -- Steven Wright

 
 
Niels Andersen (16-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 16-12-02 16:52

Jonas Voss wrote in <atkpbv$21rd$1@ID-112111.news.dfncis.de>:
> Indholdet og subjekt til mailen bliver forfattet i en formular og
> sendes til smtp-scriptet. Problemer er, at æøå i subjekt linien bliver
> skrevet som X'ere, og ikke som æøå. Mailens indhold, med æøå, fungerer
> fint.

Du kan encode emne-linjen (og andre headers) med fx. base64 eller
quoted-printable.

Jeg sendte en email til mig selv med både æ, ø og å i emne-feltet.
I sourcen til mailen jeg modtog, var bla. denne linje:
Subject: test - =?iso-8859-1?b?YmzlYuZyZ3L4ZA==?=

Det første sted der var et dansk bogstav med plaintext altså afbrudt og
efterfulgt af noget encoded.

En kort encoded streng kan laves sådan her (frit efter hukommelsen og
ovenstående test):

=?tegnsæt?codec?kodettext?=

Tegnsæt: Fx. iso-8859-1
Codec: Ét bogstav, fx. "b" for base64 eller "q" for quoted printable.

(Jeg kan ikke huske hvilken standard der definerer det)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Jacob Bunk Nielsen (16-12-2002)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 16-12-02 19:40

Niels Andersen <niels-usenet@myplace.dk> writes:

> Tegnsæt: Fx. iso-8859-1
> Codec: Ét bogstav, fx. "b" for base64 eller "q" for quoted printable.
>
> (Jeg kan ikke huske hvilken standard der definerer det)

Mon ikke du tænker på RFC 2047 (MIME (Multipurpose Internet Mail
Extensions) Part Three: Message Header Extensions for Non-ASCII
Text)?

Den kan blandt andet findes på
<http://rfc.sunsite.dk/rfc/rfc2047.html>.

--
Jacob - www.bunk.cc
Never tell a lie unless it is absolutely convenient.

Jonas Voss (16-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 16-12-02 19:42

On Mon, 16 Dec 2002 16:51:50 +0100, Niels <niels-usenet@myplace.dk> wrote:

> Du kan encode emne-linjen (og andre headers) med fx. base64 eller
> quoted-printable.

[snip]

> En kort encoded streng kan laves sådan her (frit efter hukommelsen og
> ovenstående test):
>
>=?tegnsæt?codec?kodettext?=
>
> Tegnsæt: Fx. iso-8859-1
> Codec: Ét bogstav, fx. "b" for base64 eller "q" for quoted printable.
>
> (Jeg kan ikke huske hvilken standard der definerer det)

Fedt, tak. Jeg vil udforske det yderligere, mon ikke det står i en RFC
et sted?

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"Time is an illusion. Lunchtime doubly so."

Jonas Voss (16-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 16-12-02 21:15

On Mon, 16 Dec 2002 19:41:37 +0100, Jonas <voss@dev.null.dk> wrote:

>> (Jeg kan ikke huske hvilken standard der definerer det)
>
> Fedt, tak. Jeg vil udforske det yderligere, mon ikke det står i en RFC
> et sted?

Som andre har bidraget med står det i RFC2047, men mystikken er
imidlertidig begyndt at brede sig.

Mens jeg sidder og tester får jeg scriptet til at sende det til mig
selv, på to forskellige adresser, der ligger på to forskellige servere.

Mine content-headers i mailen ser pt. således ud:

Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Mails modtaget på den ene adresse kan fint vise æøå i subjektlinien,
den anden kan ikke. Den ene server er en WinNT/Netware mailserver, den
anden en linux RedHat.

Begge mails bliver læst i samme klient, Mail 1.2.2.

Har serveren noget at sige om tolkningen af headerne, og dermed
mailens indhold, eller er det min klient der tager sig nogle
tolkningsfriheder?

Et andet spørgsmål går på den faktiske implementering af indkodningen
af subjekt-feltet. Når det kommer i produktion, skal kunden selv
kunne udfylde subjektlinien, og der skal derfor tages højde for æøå og
ÆØÅ.

Ville det være smart at starte $subject med:

=?iso-8859-8?b?

og dernæst rulle det indtastede igennem preg_replace, der finder
æøåÆØÅ og erstatter dem med =C6=D8=C5=E6=F8=E5 som den finder lyst til?

Jeg går ud fra det er sådan noget der skal til, spørger blot for en
sikkerheds skyld inden jeg spilder et par timer på at skrive nogle
regexp der kan klare opgaven (;

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

   My theory of evolution is that Darwin was adopted.
-- Steven Wright

Peter Brodersen (16-12-2002)
Kommentar
Fra : Peter Brodersen


Dato : 16-12-02 21:27

On Mon, 16 Dec 2002 21:14:54 +0100, Jonas Voss <voss@dev.null.dk>
wrote:

>=?iso-8859-8?b?
>
>og dernæst rulle det indtastede igennem preg_replace, der finder
>æøåÆØÅ og erstatter dem med =C6=D8=C5=E6=F8=E5 som den finder lyst til?

Lige for en god ordens skyld:

"b" er lig med base64-encoding.
"q" er lig med quoted_printable, som du selv giver et eksempel på.

--
- Peter Brodersen

Jonas Voss (16-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 16-12-02 21:58

On Mon, 16 Dec 2002 21:27:16 +0100, Peter <usenet@ter.dk> wrote:

> On Mon, 16 Dec 2002 21:14:54 +0100, Jonas Voss <voss@dev.null.dk>
> wrote:
>
>>=?iso-8859-8?b?
>>
>>og dernæst rulle det indtastede igennem preg_replace, der finder
>>æøåÆØÅ og erstatter dem med =C6=D8=C5=E6=F8=E5 som den finder lyst til?
>
> Lige for en god ordens skyld:
>
> "b" er lig med base64-encoding.
> "q" er lig med quoted_printable, som du selv giver et eksempel på.

Ah ja, tak. Det var en svipser.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

   Mouse pad (n): Where mice are launched.

Niels Andersen (16-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 16-12-02 22:13

Jonas Voss wrote in <uqo1d-os2.ln1@wintermute.verture.net>:
> Ville det være smart at starte $subject med:
> =?iso-8859-8?b?
> og dernæst rulle det indtastede igennem preg_replace, der finder
> æøåÆØÅ og erstatter dem med =C6=D8=C5=E6=F8=E5 som den finder lyst til?
>
> Jeg går ud fra det er sådan noget der skal til, spørger blot for en
> sikkerheds skyld inden jeg spilder et par timer på at skrive nogle
> regexp der kan klare opgaven (;

PHP har funktioner til både quoted-printable og base64.

http://www.php.net/manual/en/function.imap-8bit.php
http://www.php.net/manual/en/function.base64-encode.php

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Jonas Voss (16-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 16-12-02 23:29

On Mon, 16 Dec 2002 22:13:01 +0100, Niels <niels-usenet@myplace.dk> wrote:

> PHP har funktioner til både quoted-printable og base64.
>
> http://www.php.net/manual/en/function.imap-8bit.php
> http://www.php.net/manual/en/function.base64-encode.php

Jeg har aldrig været god til RTFM (;

Tusind tak for hjælpen til jer der svarede, jeg løste det på følgende
måde, som uden tvivl kan laves mere elegant.

Scriptet modtager en jomfruelig $subject, indeholdende danske
bogstaver, og får denne tur:

$subject_enc = "=?iso-8859-1?b?";
$subject_enc .= base64_encode($subject);
$subject_enc .= "?=";

SMTP-makkeren får så følgende lige i lysken:

fputs ($SMTPconnect, "Subject:$subject_enc" . "\r\n" );
fputs ($SMTPconnect, "$headers\r\n");
fputs ($SMTPconnect, "From:$mig@$domaene"."\r\n" );
fputs ($SMTPconnect, "To:$row[email]"."\r\n" );
fputs ($SMTPconnect, "\r\n" );
fputs ($SMTPconnect, "$message " . "\r\n" );
fputs ($SMTPconnect, ".\r\n");

Og det er både server og klient ganske godt tilfreds med.

Endnu en gang, tak for hjælpen.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

Sorry, no quote today.

Peter Brodersen (16-12-2002)
Kommentar
Fra : Peter Brodersen


Dato : 16-12-02 20:14

On Mon, 16 Dec 2002 16:51:50 +0100, Niels Andersen
<niels-usenet@myplace.dk> wrote:

>Jeg sendte en email til mig selv med både æ, ø og å i emne-feltet.
>I sourcen til mailen jeg modtog, var bla. denne linje:
>Subject: test - =?iso-8859-1?b?YmzlYuZyZ3L4ZA==?=

Dertil kommer at der kan være flere led.

[..]

>(Jeg kan ikke huske hvilken standard der definerer det)

RFC2047.

Den fejl, jeg har set allerflest mail- og news-programmer lave, er
ikke at overholde "White space between adjacent 'encoded-word's is not
displayed.". I nyhedsgrupper giver det ofte et stigende antal ekstra
mellemrum et sted i fx subject.

(.. og så har jeg ikke engang fået taget mig sammen til at få rettet
det i min egen mailreader; "i det mindste" kan man dog ikke reply'e
fra den, så det ekstra mellemrum bliver dog ikke spredt :)

--
- Peter Brodersen

Jakob Bock (17-12-2002)
Kommentar
Fra : Jakob Bock


Dato : 17-12-02 13:21

Jonas Voss skrev:

> Mine content-headers i mailen ser pt. således ud:
>
> Content-Type: text/plain; charset="iso-8859-1"
> Content-Transfer-Encoding: 8bit

Disse headere har kun noget med tekstdelen at gøre -- ikke med andre
headere.

> =?iso-8859-8?b?

Så vidt jeg har forstået, er det ikke god stil at bruge base64
encoding i headere -- brug quoted printable (q) i stedet.

--
Venlig hilsen
Jakob Bock

Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 13:33

Jakob Bock wrote in <atn4sf$4dv$1@sunsite.dk>:
>> =?iso-8859-8?b?
> Så vidt jeg har forstået, er det ikke god stil at bruge base64
> encoding i headere -- brug quoted printable (q) i stedet.

Nemlig, base64 er så svært at læse. :)
(altså hvis ikke computeren har decodet det først)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Jonas Voss (17-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 17-12-02 15:25

On Tue, 17 Dec 2002 13:21:22 +0100, Jakob <jakob.bock@mail.dk> wrote:

> Jonas Voss skrev:
>
>> Content-Type: text/plain; charset="iso-8859-1"
>> Content-Transfer-Encoding: 8bit
>
> Disse headere har kun noget med tekstdelen at gøre -- ikke med andre
> headere.

Ok. Rart at vide.

>> =?iso-8859-8?b?
>
> Så vidt jeg har forstået, er det ikke god stil at bruge base64
> encoding i headere -- brug quoted printable (q) i stedet.

Er hermed rettet. Er der nogen bestemt grund til at det ikke er god
stil, altså ud over at læsevenligheden ryger, som Niels pointerer? Er
base64 måske mere anvendeligt til at encode attachments?

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

   AHHH. Donuts. . . What can't they do. -- H. Simpson

Niels Andersen (17-12-2002)
Kommentar
Fra : Niels Andersen


Dato : 17-12-02 16:14

Jonas Voss wrote in <pmo3d-ij3.ln1@wintermute.verture.net>:
>> Så vidt jeg har forstået, er det ikke god stil at bruge base64
>> encoding i headere -- brug quoted printable (q) i stedet.
> Er hermed rettet. Er der nogen bestemt grund til at det ikke er god
> stil, altså ud over at læsevenligheden ryger, som Niels pointerer?

Jeg kan ikke lige komme i tanker om andre. Men der er faktisk forbavsende
mange, hvis primære mail-klient ikke kan klare encodede headere.

Bare for at vise eksempler på at det sker:
http://groups.google.com/groups?oi=djq&as_q=iso-8859-1?q

> Er base64 måske mere anvendeligt til at encode attachments?

base64 er beregnet til at overføre binær data over plaintext-medier, som
emails jo er. Det er kun spammere, der bruger det til tekst.

(Nogle mailfiltre finder ikke fy-ord, hvis teksten er base64-encoded, men de
fleste email-klienter kan fint læse det.)

--
Mvh.

Niels Andersen
(la nels. anersyn.)

Jonas Voss (17-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 17-12-02 17:40

On Tue, 17 Dec 2002 16:13:30 +0100, Niels <niels-usenet@myplace.dk> wrote:

> Jonas Voss wrote in <pmo3d-ij3.ln1@wintermute.verture.net>:
>
>> Er hermed rettet. Er der nogen bestemt grund til at det ikke er god
>> stil, altså ud over at læsevenligheden ryger, som Niels pointerer?
>
> Jeg kan ikke lige komme i tanker om andre. Men der er faktisk forbavsende
> mange, hvis primære mail-klient ikke kan klare encodede headere.
>
> Bare for at vise eksempler på at det sker:
> http://groups.google.com/groups?oi=djq&as_q=iso-8859-1?q

(; Ja det er jo ikke just læsevenligt.

>> Er base64 måske mere anvendeligt til at encode attachments?
>
> base64 er beregnet til at overføre binær data over plaintext-medier, som
> emails jo er. Det er kun spammere, der bruger det til tekst.

Det er de så også ret flittige til må man sige.

> (Nogle mailfiltre finder ikke fy-ord, hvis teksten er base64-encoded, men de
> fleste email-klienter kan fint læse det.)

Tak for forklaringen. Jeg holder mig til quoted printable i dette
tilfælde tror jeg., det kan man næsten deciphrere hvis ens klient ikke
kan tolke det, i modsætning til base64.

--
| Jonas @ 55.75, 12.42 | <http://verture.net/> |

"If there's anything more important than my ego,
I want it caught and shot now."

Peter Brodersen (18-12-2002)
Kommentar
Fra : Peter Brodersen


Dato : 18-12-02 05:15

On Tue, 17 Dec 2002 15:24:57 +0100, Jonas Voss <voss@dev.null.dk>
wrote:

>Er hermed rettet. Er der nogen bestemt grund til at det ikke er god
>stil, altså ud over at læsevenligheden ryger, som Niels pointerer?

RFC2047 nævner i afsnit 4 under encodings:

==
The "Q" encoding is recommended for use when most of the characters to
be encoded are in the ASCII character set; otherwise, the "B" encoding
should be used. Nevertheless, a mail reader which claims to recognize
'encoded-word's MUST be able to accept either encoding for any
character set which it supports.
==

Angående "Q", så nævnes der også i forbindelse med brugen af "_" som
mellemrum (4.2, punkt 2):

==
(This character may not pass through some internetwork mail gateways,
but its use will greatly enhance readability of "Q" encoded data with
mail readers that do not support this encoding.)
==

Så et godt bud vil være af læsehensyn (og hermed også bare fx en smule
filtrering/søgning, hvis man fx ikke lige har adgang til at varme op
under en decoder). Det kan jeg kun tilslutte mig af praktiske årsager.
Men som afsnit 4 netop siger, så bør base64-encoding virke lige så
godt som quoted-printable content-transfer-encoding.

--
- Peter Brodersen

Jonas Voss (18-12-2002)
Kommentar
Fra : Jonas Voss


Dato : 18-12-02 09:00

On Wed, 18 Dec 2002 05:15:01 +0100, Peter <usenet@ter.dk> wrote:

> RFC2047 nævner i afsnit 4 under encodings:

[snip - forklaring om character encoding]

Tak for endnu et meget anvendeligt svar.

--
| Jonas @ 55.75, 12.42 |

   The sooner you fall behind,
   the more time you'll have to catch up. -- Steven Wright

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste