[ISO 8859-1] Emaily česky

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod hawrran66 22. 4. 2013 13:08

Zdravím, mám docela problém, stránky mám kódované v ISO 8859-1, pomocí php a emailových šablon odesílají stránky upozorňovací emaily apod. registrovaným uživatelům, ale ne správnou češtinou, šablony jdou česky uložit, je mi jasné, že je to kódováním(tak mně za to nekamenujte, já je netvořil), v souborech jsem našel následující
Kód: Vybrat vše
<b>- Add a text message with non-ASCII characters</b><paragraphbreak />
         If your message text may contains non-ASCII characters (8 bits or
         more), use the
         <functionlink>AddQuotedPrintableTextPart</functionlink> function
         to add the text to the message.<paragraphbreak />
         <paragraphbreak />
         If the text uses a character set other than
         <i>ISO-8859-1</i> (ISO Latin 1), set the
         <variablelink>default_charset</variablelink> variable to change the
         default character set.<paragraphbreak />

což se asi týká mého problému, ovšen samozřejmě nevím jak na to, mohl by někdo poradit ?
Díky za rady.
hawrran66
Junior

Odeslat příspěvekod gandor 22. 4. 2013 13:28

To mas vazny problem, lebo iso 8859-1 je regionalne kodovanie cudzieho regionu. Jednoducho povedane, niektore ceske znaky tam jednoducho NIESU. Ked uz je nutne posielat spravy v regionalnom kodovani a nie v UTF-8, tak aspon pouzit 8859-2 (tam su nase regionalne znaky)....
Takze co ti ostava? Natahovat spravu s nejakeho externeho suboru, ktory bude v spravnom kodovani a v tomto kodovani to aj posielat. Pripadne existuju urcite konverzie na strane PHP (iconv, mb_*), ale s iso-8859-1 to ani pomocou tychto funkcii nepojde...
Pripadne ak posielas HTML emaily, tak vsetky znaky konvertovat na ich entity (htmlentities) - znova ale na napisanie samotnej spravy potrebujes nejaky externy subor v inom kodovani...

PS. pokial sa chystas dalej so systemom pracovat, tak sa tes na problemy, ktore vzniknu na zaklade pouzivania viac druhov kodovani. Ono sa to casom domiesa dokopy a potom s tym bude skutocna "sranda"... Idealne by bolo cele prehodit to na utf-8 (ak sa to este da)....
Naposledy upravil gandor dne 22. 4. 2013 13:30, celkově upraveno 1
gandor
Mírně pokročilý

Odeslat příspěvekod kmarty 22. 4. 2013 13:30

Ahoj,
v zasade ti pisou vse potrebne.
V mailu se totiz daji prenest pouze 7-bit znaky (t.j. ciste ASCII). Chces-li prenest jine znaky, musi byt zakodovany bud jako "Quoted Printable" (vysledek pak vypada nejak takhle):
Kód: Vybrat vše
mo=BEn=E1 pr=FD budou
proste cokoliv, co je mimo ASCII je prekodovano tak, aby to pomoci ASCII slo prenest.
Nebo jako Base64 (vysledek bude vypadat takhle):
Kód: Vybrat vše
bW/Fvm7DoSBwcsO9IGJ1ZG91IG5hdsO9xaFlbnkK
Pokud pouzijes jine kodovani nez ISO Latin1 (jakoze ano, pouzijes bud ISO Latin2 nebo UTF-8 kdyz tam pouzivas cestinu), pak ho musis explicitne definovat.

P.S.: ISO Latin1 (ISO8859-1) je tzv. "zapadni" kodovani. Nevhodne pro cestinu.
P.P.S.: Kodovani "windows-1250" je pouze "tolerovano", nikoliv navrhovano nebo doporuceno. Nikdo neni povinen jej zobrazit nebo prinejhorsim transliterovat (narozdil od ISO kodovani).
kmarty
Junior
Uživatelský avatar

Odeslat příspěvekod hawrran66 22. 4. 2013 13:47

Díky Vám oběma za rady,
Kmarty co jsi myslel tím:Pokud pouzijes jine kodovani nez ISO Latin1 (jakoze ano, pouzijes bud ISO Latin2 nebo UTF-8 kdyz tam pouzivas cestinu), pak ho musis explicitne definovat.
Takže by šlo to někam připsat, aby ty maily odešli v jiném kódování ?
hawrran66
Junior

Odeslat příspěvekod gandor 22. 4. 2013 14:03

Ano. Do hlavicky mailu (je ale otazne, ze kde sa to robi v tvojom pripade). Pozor ale, aby bol ten mail aj fyzicky napisany v spravnom kodovani...
Asi najlahsie co sa da spravit je nechat uz to existujuce kodovanie (posielat to v tej Latin1) a pouzit to quotedPrintable alebo base64 (resp. cokolvek ine, co dany mail client pochopi a prelozi do spravnych znakov)...
gandor
Mírně pokročilý

Odeslat příspěvekod kmarty 22. 4. 2013 14:20

2gandor: Ja se obavam ze to neprojde.
Quoted-printable primo odkazuje na pozici v kodove tabulce. To znamena ze pokud mas pri kodovani nastavenou spatnou tabulku, tak kodovani selze pokud narazi (a to narazi) na znak, ktery se v te tabulce nevyskutuje.
Base64 je drobatko zakernejsi, protoze to se projevi az pri dekodovani na prijimaci strane. Ve vysledku pak prijimaci strana zobrazi jiny znak nez byl zamyslen (protoze se v ISO Latin1 tabulce nevyskytuje).
Zkratka polozka charset="..." v hlavicce mailu (presneji te casti mailu) musi odpovidat tomu kodovani v jakem to bylo pred zakodovanim.
Naposledy upravil kmarty dne 22. 4. 2013 14:21, celkově upraveno 1
kmarty
Junior
Uživatelský avatar

Odeslat příspěvekod Vebloud 22. 4. 2013 14:21

Můžu se zeptat, proč řešíš v podstatě stejný problém v dalším vlákně? viewtopic.php?f=923&t=1189398
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
Ex-moderátor
Uživatelský avatar

Odeslat příspěvekod kmarty 22. 4. 2013 14:24

2Velbloud: Ano, z casti resi totez.
Tady to ma zkomplikovany jeste protahnutim pres mail.
kmarty
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 22. 4. 2013 14:32

kmarty píše:2gandor: Ja se obavam ze to neprojde.
Quoted-printable primo odkazuje na pozici v kodove tabulce. To znamena ze pokud mas pri kodovani nastavenou spatnou tabulku, tak kodovani selze pokud narazi (a to narazi) na znak, ktery se v te tabulce nevyskutuje.
Base64 je drobatko zakernejsi, protoze to se projevi az pri dekodovani na prijimaci strane. Ve vysledku pak prijimaci strana zobrazi jiny znak nez byl zamyslen (protoze se v ISO Latin1 tabulce nevyskytuje).
Zkratka polozka charset="..." v hlavicce mailu (presneji te casti mailu) musi odpovidat tomu kodovani v jakem to bylo pred zakodovanim.

Hmm asi som to zle napisal. Hlavicku by som menil tak ci onak. Len ked mam zdrojovy text v latin1, tak proste č nenapisem. Ale aj latin1 kodovani dokazem napisat ekvivalent "č" v utf-8 cez base64 (alebo html entitu).
gandor
Mírně pokročilý

Odeslat příspěvekod hawrran66 22. 4. 2013 14:48

Vebloud píše:Můžu se zeptat, proč řešíš v podstatě stejný problém v dalším vlákně? viewtopic.php?f=923&t=1189398

Protože jses si bláhově myslel, že by to šlo nějak změnit, a taky jsem myslel, že dávat další
problém do starého vlákna není vhodné.

-- 22. 4. 2013 15:01 --

Díval jsem se do mail manageru a našel toto:
Kód: Vybrat vše
   $email_message->default_charset='UTF-8';
   $email_message->SetEncodedEmailHeader("To",$to_address,$to_name);
   $email_message->SetEncodedEmailHeader("From",$from_address,$from_name);
   $email_message->SetEncodedEmailHeader("Reply-To",$reply_address,$reply_name);


tak už to nějak nechápu.
hawrran66
Junior

Odeslat příspěvekod kmarty 22. 4. 2013 15:06

gandor píše:Ale aj latin1 kodovani dokazem napisat ekvivalent "č" v utf-8 cez base64...
To uz pak ale neni latin1, ale utf-8. Base64 je jen forma jak to procpat pres 7-bitovou cestu (coz musis tak jako tak i u latin1).
Na HTML entity bych u text/plain nesazel.
kmarty
Junior
Uživatelský avatar

Odeslat příspěvekod gandor 22. 4. 2013 17:10

hawrran66: To znamena, ze uz tu hlavicku mas nastavenu na posielanie UTF-8. Teraz uz len potrebujes dostat realne pismena tak, aby po interpretovani ako UTF-8 aby sa vypisali ako ceska diakritika. Napr. uz cez spominany base64...

Offtopic
kmarty: Asi sa rozumieme, ale aj tak to sem uz teda napisem. Mam fyzicke kodovanie latin1 (takze ked nieco datlim do zdrojaku, tak to tam vklada ako latin1). V tomto kodovani len tazko napisem "nieco", co sa po interpretacii do utf-8 nahodi ako č.
Ako samozrejme, ze to ide, ale kto chce pisat (a pamatat si) nieco typu "ľµ" miesto realneho znaku (a nebodaj este to niekto zle pochopi a prekonvertuje to omylom este do niecoho ineho)?
To uz je skvor ta cesta napisat to v externom file so spravnym kodovanim ako som pisal, alebo pouzit nejake kodovanie (a je jedno, ze ci cez base64, ktore koduje len do 6 vsade-rovnako-zrozumitelnych bitov, alebo cez htmlentities a pri vpustani davat entity_decode s 3. parametrom utf-8, alebo to pisat este inym sposobom)...
Vysledok stale ostava, ze musim programu proste nejak povedat, ze sem ma potom vlozit "nieco" co pochopy ako dany znak diakritiky.
Vo finale ale plati to co si napisal. Pokial koncovemu uzlu nepoviem, ze to co mu davam je UTF-8 (resp. latin2), tak sa to nikdy spravne nezobrazi nech pouzijem akekolvek kodovanie (mozno az na tie entities v html mailoch - tie predsa len funguju mierne inak). Takze tu vyslednu hlavicku je treba nastavit...

PS. html entity a text plain naozaj dokopy nepojdu. Preto som hned na zaciatku pisal, ze to pojde pri HTML mailoch (teda text/html miesto text/plain)...
gandor
Mírně pokročilý

Odeslat příspěvekod kmarty 22. 4. 2013 20:27

Nj, kdyz ja to mam porad nakrouceny na ten mail :-)
Ja uz se vam do toho stejne michat nebudu. Jen mne napada, nejde v PHPku pouzit iconv?
Ale ted uz fakt koncim :-)
kmarty
Junior
Uživatelský avatar

Odeslat příspěvekod hawrran66 31. 5. 2013 13:50

Dík za odpovědi, musím bohužel přiznat, že nevím jak to nastavit, mám na mysli Base64, co vlastně mám tedy použít?
hawrran66
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků