kodovanie

Programovacie jazyky, rady, poradňa...
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

kodovanie

Príspevok od používateľa Snacker »

Zdravim,
Mam problem s kodovanim, ked mi pride mail niekedy je kodovanie ok a niekedy mi pride sprava priblizne takto :
=09=C4=8Eakujeme, =C5=BEe ste si vybrali
neviete funciu ktorou by som to mohol odkodovat do UTF-8 ktore pouzivam ja?

Dakujem
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

V čom sa ti to tak zobrazuje? (program, na prezeranie emailov by to mal dekódovať automaticky)
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

nie, ja mam vlastne mailove rozhranie, vacsinu veci som dekodoval no s tymto mam problem
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

tu si riešil podobný problém: http://www.hojko.com/viewtopic.php?t=122305
skús sa pozreť na imap_utf8()
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

viem ale ide teraz o trosku iny problem, skusal som aj imap_utf8() ale nepomohlo. Proste ani neviem v com to koduje ale je to ako url len namiesto % je tam =

Skusil som zmenit = za % a dekodovat to cez urldecode

Kód: Vybrať všetko

<?php 
$string = "=09=C4=8EAKUJEME, =C5=BEE STE SI VYBRALI *** ***. PRAJEME V=C3=A1=M PR=C3=ADJEMN=C3=BA Z=C3=A1BAVU A TE=C5=A1=C3=ADME SA NA VA=C5=A1U N=C3==A1V=C5=A1TEVU.";
echo urldecode(preg_replace('@=@', '%', $string));
// ĎAKUJEME, žE STE SI VYBRALI *** ***. PRAJEME Vá% M PRíJEMNú ZáBAVU A TEšíME SA NA VAšU N�% �VšTEVU.
?>
Je to lepsie ale ako vidite stale to neni ono
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

<?php

function decode_utf8($str){
       # paterns
           $err="(=\?.{10,13}q\?_?|\?\=)";
           $pat = "/=([0-9A-F]{2})/";
           $cha="'.chr(hexdec(";
       # erase null signs in string
          $str=eregi_replace($err,"",$str);
       # to decode with eval and replace
          eval("\$str='".
                  preg_replace($pat,$cha."'$1')).'",$str)
                  ."';");
        # return
           return $str;
} 


$string = "=09=C4=8Eakujeme, =C5=BEe ste si vybrali";
echo $string;
echo "<br/>";
echo decode_utf8($string);

?>
výstup:
=09=C4=8Eakujeme, =C5=BEe ste si vybrali
Ďakujeme, že ste si vybrali
tá funkcia decode_utf8 je z príkladu čo som ti dal link na funkciu imap_utf8()
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pravdepodobne to budeš musieť urobiť komplikovanejšie, keďže v tej hlavičke by malo byť ešte aj kódovanie (a teda pred tým textom by v tvojom prípade bolo niečo ako =?UTF-8?Q?). Tam pomôže funkcia imap_mime_header_decode (ktorú som tiež našiel na tej stránke, čo na ňu dal link audiotrack) ;)
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

audiotrack - tu prvu cast mi to ukazalo dobre ale tu druhu nejak takto
PRAJEME Vá=M PRíJEMNú ZáBAVU A TEšíME SA NA VAšU N�=�
chrono - tato funkcia mi vzdy pekne posluzi kedporebujem dekodovat hlavicku a zistit ake ma kodovanie ale v body mailu sa n zaciatku nic take ako informacia o kodovani nevyskytuje (napr. =?UTF-8?Q?) ak pouzijem funkciu imap_mime_header_decode pre body tak sa nic nestane ani ked pred to dat informaciu o kodovani z predmetu mailu
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Predpokladám, že ak je samotná správa kódované MIME kódovaním, tak je o tom informácia v hlavičke a tam je aj to použité kódovanie (pravdepodobne kombinácia Content-Transfer-Encoding: quoted-printable a Content-Type: ...).
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Poslal som si mail a dal som si zobrazit celu hlavicku

Kód: Vybrať všetko

object(stdClass)#7 (23) { ["date"]=> string(38) "Wed, 12 Aug 2009 19:01:22 +0200 (CEST)" ["Date"]=> string(38) "Wed, 12 Aug 2009 19:01:22 +0200 (CEST)" ["subject"]=> string(4) "asda" ["Subject"]=> string(4) "asda" ["message_id"]=> string(58) "<883d4c091395d6d6c248ac33af4aefd1.squirrel@www.***.sk>" ["toaddress"]=> string(20) "***@***.com" ["to"]=> array(1) { [0]=> object(stdClass)#8 (2) { ["mailbox"]=> string(8) "***" ["host"]=> string(11) "***.com" } } ["fromaddress"]=> string(26) "***@***.sk" ["from"]=> array(1) { [0]=> object(stdClass)#9 (2) { ["mailbox"]=> string(11) "***" ["host"]=> string(14) "***.sk" } } ["reply_toaddress"]=> string(26) "***@***.sk" ["reply_to"]=> array(1) { [0]=> object(stdClass)#10 (2) { ["mailbox"]=> string(11) "***" ["host"]=> string(14) "***.sk" } } ["senderaddress"]=> string(26) "***@***.sk" ["sender"]=> array(1) { [0]=> object(stdClass)#11 (2) { ["mailbox"]=> string(11) "***" ["host"]=> string(14) "***.sk" } } ["Recent"]=> string(1) "N" ["Unseen"]=> string(1) " " ["Flagged"]=> string(1) " " ["Answered"]=> string(1) " " ["Deleted"]=> string(1) " " ["Draft"]=> string(1) " " ["Msgno"]=> string(4) " 1" ["MailDate"]=> string(26) "12-Aug-2009 19:01:22 +0200" ["Size"]=> string(3) "961" ["udate"]=> int(1250096482) } array(1) { [0]=> object(stdClass)#12 (2) { ["charset"]=> string(7) "default" ["text"]=> string(4) "asda" } } array(1) { [0]=> object(stdClass)#14 (2) { ["charset"]=> string(7) "default" ["text"]=> string(4) "asda" } } 
Cakal som ze tam bude nieco ako charset: UTF-8 alebo ISO-8859-2 ale vhlavicke je napisae len ["charset"]=> string(7) "default" :?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ten email pozri tak, aby si videl nespracovanú hlavičku (lebo je možné, že tá knižnica, čo používaš robí nejaké úpravy).
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Praveze ja nepouzivam ziadnu kniznicu, len

Kód: Vybrať všetko

$mbox = imap_open ("{localhost:995/pop3/ssl/novalidate-cert}", $nick."@***.com", $password);
$hlavicka = imap_headerinfo($mbox, 1);
var_dump($hlavicka);
len imap_open, vytiahnem pomocou fcie imap_headerinfo hlavickove informacie a var_dump-nem ich

//edit

Ked som sa pozrel teraz do curiera tak tam je pekna hlavicka aj so spravou aj s kodovanim

Kód: Vybrať všetko

Return-Path: <***@***.sk>
X-Original-To: ***@***.com
Delivered-To: ***@***.com
Received: from ns1.euronet.sk (ns1.euronet.sk [217.67.17.162])
	by begyben.com (Postfix) with ESMTP id AB7A43E300
	for <***@***.com>; Wed, 12 Aug 2009 20:07:26 +0200 (CEST)
Received: by ns1.euronet.sk (Postfix, from userid 80)
	id 36C8E4AC34; Wed, 12 Aug 2009 20:05:59 +0200 (CEST)
Received: from 84.16.38.50
        (SquirrelMail authenticated user ***)
        by www.***.sk with HTTP;
        Wed, 12 Aug 2009 20:05:59 +0200 (CEST)
Message-ID: <a6832517191ff9ae9af1606ccf83c7c0.squirrel@www.***.sk>
Date: Wed, 12 Aug 2009 20:05:59 +0200 (CEST)
Subject: sdaf
From: p***@***.sk
To: ***@b***.com
User-Agent: SquirrelMail/1.4.17
MIME-Version: 1.0
Content-Type: text/plain;charset=iso-8859-2
Content-Transfer-Encoding: 8bit
X-Priority: 3 (Normal)
Importance: Normal

Testovacia sprava
Len ked pouzijem tieto hore uvedene funkce nejak to modifikuje asi.

Ako by somto mohol vytiahnut taketo neposvrnene?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Skús poslať text s diakritikou a porovnaj skutočnú hlavičku a imap_headerinfo. Je možné, že tá funkcia automaticky konvertuje text do utf-8 a teda na ten text vždy stačí tá funkcia imap_utf8.
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Ked pozriem hlavicku, pekne sa mi vsetko zobrazi ako somti pastol hore. Ak pouzijm funkciu imap_headerinfo znakova sada sa zmeni na default, cize nemam sancu zistit ake kodovanie pouziva mail.
Skusil som aj imap_utf8 ale toiste ako prdtym.

Skusil som test, ze som si poslal mail, o ktorom som vedel ze mi ho posle v kodovani ISO-8859-2. Pouzil som funkciu iconv() asi takto:

Kód: Vybrať všetko

$body = iconv("ISO-8859-2", "UTF8", $body);
A sprava sa mi krasne zobrazila. Takze problemom ostava ako zistit v akom kodovani je dany mail.

Mozno ze som prisiel v com je problem ale neviem ho riesit. Pouzil som takuto funkciu:

Skusal som aj

Kód: Vybrať všetko

function decode($input) { 
    $array = imap_mime_header_decode($input); 
    return $array[0]->charset; 
}
Kde ked vlozim predmet tak mi ho dekodujea urci hodovanie. Ked zadam predmet bez diakritiky tak vysledny charset je : default (co vyplyva aj z dokumentacie If the element hasn't been encoded, and in other words is in plain US-ASCII, the charset property of that element is set to default.)
Ked vlozim to predmetu aj diakritiku tak mi hodi presnetokodovaniekore potrebujem aby som mohol odkodovat aj body. Ak by som vedel kodovanie pouzil by som uz len funkciu iconv(). ALe ked zadam hlavicku cez diakritiky a body s diakr. tak to cle pada. neviem sposob ako zistit skutocne kodovanie z body, kedze body na zaciatku neuvadza info o kodovani
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Keď je diakritika len v texte (a nie v hlavičke) tie imap funkcie nejako upravujú ten text? (alebo ti vrátia presne taký text, ako tam príde?)
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Vratia mi presne tak ako mi to pride. Hlavicku nemam problem odkodovat ale body nedokazem kedze neviem v akom je kodovani
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Možno by si mal otestovať prípad, keď ten email má iné kódovanie (teda napr. windows-1250).
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Ale tym pravdepodobne nic nevyriesim, ak datniekritiku napisemi charset windows-1250 ak nedam tak default teda ACSII ale o body sa nic nedozviem. Musipredsa existovatskosob ako zistim v akomkodovani je body. Vhlavicke viem,aj vprilohe viem ale body netusim
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Len som chcel vedieť, či ti tam default nedáva práve preto, že systém používa kódovanie iso-8859-2 a aj ten e-mail je v iso-8859-2.
Snacker
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 362
Registrovaný: 08 jún 2009, 22:42
Kontaktovať používateľa:

Príspevok od používateľa Snacker »

Ked som poslal mail, v klavicke cez curiera som nasiel Content-Type: text/plain; charset="ISO-8859-1" dosiel mi zle zobrazeny (namisto pismen s diakritikou boli otazniky)
A v predmete ziadna zmienka o kodovani cize charset="default". Pouzivam UTF-8. Ked som v prehliadaci
zmenil hodovanie za ISO-8859-2 mail resp. diakritika sa zorazila spravne.

To iste aj u kodovania ISO-8859-16. U UTF-8 mi najde charset ale zobrazi mi ten text teda nieco
ako ak=C4=8Dn=C3=BD, =C4=8Desk=C3=A9 ...

ale niekedy sa mivUTF-8 mail zobrazi spravne

Asi to default usko suvisi s nejakym ISO-8859-1

Ja som z toho uz totalne dopleteny
Napísať odpoveď