Portál AbcLinuxu, 10. května 2025 02:27

Dotaz: php konverzia ASCII do HEX

11.11.2010 14:48 adrinko | skóre: 22
php konverzia ASCII do HEX
Přečteno: 1289×
Odpovědět | Admin
Zdravim,

prosim Vas, ako by som v php uspesne prekonvertoval ascii text do HEX?

Skusal som

function ascii2hex($ascii) {

$hexadecimal = '';

for ($i = 0; $i < strlen($ascii); $i++) {

$byte = strtoupper(dechex(ord($ascii{$i})));

$byte = str_repeat('0', 2 - strlen($byte)).$byte;

$hexadecimal.=$byte." ";

}

return $hexadecimal;

}

ale problem tohto je, ze mi diakritiku (+ľščťžýáíéúä, atď) nevie prekonvertovat. Budem vdacny za kazdu radu.

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.11.2010 15:28 chrono
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Odpovědět | | Sbalit | Link | Blokovat | Admin
Chceš teda konvertovať ASCII (a teda bez diakritiky), alebo tam potrebuješ aj tú diakritiku (ak áno, tak tam budeš musieť určiť, v akom kódovaní to má byť).
11.11.2010 15:34 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
áno, potreboval by som výsledok znaku s diakritikou v HEX. napr, znak Ŕ by mal byť hex C0. kde a ako by som mal určiť to kódovanie?
rADOn avatar 11.11.2010 16:17 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Kodovani urcis tak ze ho urcis. Pokud nevis, tak si zjisti jaky kodovani ocekava vec do ktery chces ten svuj hex blejt. Prinejhorsim experimentalne - znak Ŕ je 0xC0 jak v latin2 tak ve win1250, ale v jinych znacich se tyto dve lisi. Treba ž je ve win1250 0x9E, v latin2 je to 0xBE.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
11.11.2010 16:49 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
okej, a ako teda v tom mojom povodnom kode urcim kodovanie napr. pre ISO-8859-1? vec sa ma tak, ze potrebujem prehodit text s diakritikou na HEX, aby som ho potom mohol takto pouzit v "a href=mailto?subject=HEX TEXT". Skratka abz po kliku na link sa otvoril emailovy klient s predvyplnenym textom, no tento text musi mat spravnu diakritiku...

11.11.2010 17:43 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Jasně chápu že někde je nějaký text který chceš vložit do mailu, ale proč ho potřebuješ převádět na HEX řetězec ?

Spíš pokud ti to tam vypisuje nesmysly tak máš problém v tom že mail klient používá jiné kodování než tvůj www server.

Nebo nepotřebuješ to překodovat do base64 ?

V php do base64 viz:
<?php
$str = 'This is an encoded string';
echo base64_encode($str);
?>
11.11.2010 18:01 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
dakujem vsetkym za rady. potreboval by som len zaistit, aby sa mi po kliku na href s mailto s preddefinovanym subjectom zobrazili spravne znaky s diakritikou. toto sa mi zatial nedari. jednine mi to funguje vtedy, ked prehodim v php string cez iconv na kodovanie win1250 a skonvertujem na hex. potom to u mna zobrazuje OK. len sa obavam, ze to neni univerzalne riesenie a na inej masine by to mohlo byt tiez rozhadzane.

P.S.sranda je, ze aj ked v outlooku pouzijem natvrdo pre vsetky spravy utf8, tak hex hodnoty sa mi zobrazia OK, i ked predtym boli nakodovane pre win1250...
11.11.2010 18:24 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
A co takhle tam zakodovat v jakém je to kodování ?

Příklad z hlavičky mailu:

Content-Type: text/plain; charset="iso-8859-2" Content-Transfer-Encoding: quoted-printable Subject: =?iso-8859-2?q?Server_linux=2Ecz=3A_Upozorn=ECn=ED_na_=FA=E8ast_?= =?iso-8859-2?q?v_konferenc=EDch?=
11.11.2010 18:40 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
nepočul som o tom, že by to bolo možné priamo v takomto hyperlinku:

Pošlite mi email
mess avatar 12.11.2010 08:51 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
To kódování je možné zakódovat přímo do toho linku - viz předchozí příspěvek.
=?iso-8859-2?q?Server_linux=2Ecz=3A_Upozorn=ECn=ED_na_=FA=E8ast_?= =?iso-8859-2?q?v_konferenc=EDch?=
Všimni si hlavně toho začátku =?iso-8859-2?q? .... To kódování samozřejmě musí odpovídat kódování toho stringu, který jsi zakódoval.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
12.11.2010 12:42 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Niekde v tomto html linku robím chybu, ale kde?
< a href="mailto:?=?iso-8859-2?q?Server_linux=2Ecz=3A_Upozorn=ECn=ED_na_=FA=E8ast_?= =?iso-8859-2?q?v_konferenc=EDch?= "> odosli email </a>
13.11.2010 01:21 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Mě to funguje můžeš vyskoušet:

odosli email

<a href="mailto:email@soban.cz?subject==?iso-8859-2?q?Server_linux=2Ecz=3A_Upozorn=ECn=ED_na_=FA=E8ast_?= =?iso-8859-2?q?v_konferenc=EDch?= "> odosli email </a>

14.11.2010 02:11 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Mně ne :), je třeba se smířit s tím, že to závisí na klientovi a lze spolehlivě předat jen ascii znaky.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
14.11.2010 10:58 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Tak je třeba zjistit jaký je to klient, zda tam nemáš nastaveno natvrdo kodování, zda máš font pro češtinu atd.....
14.11.2010 11:56 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
No a to jde, z webové stránky nezjistíte nastavení mailového klienta.
Pro M$ Outlook ten text musí být ve Windows-1250 (XP Outlook 2003), pro Evolution (Debian Lenny) v UTF-8 (při standardním nastavení).
A ani jeden z uvedených klientů nezpracuje zakódovaný řetězec, zobrazí jej tak jak leží a běží (sice správně pro sestavení e-mailové zprávy, ale tady to nezabere). Proto to smíření. :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
14.11.2010 17:53 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
sranda čo sa toho Outl.2003 týka, že to berie korektne len Win1250 kódovanie. Skúšal som prehodiť všemožné kódovania priamo v Outlooku (natvrdo i automatickú detekciu) a vždy to zobrazí korektne len win1250 (teda aj keď je v Outlooku nastavene napr utf8 a na webe tiež).
14.11.2010 17:50 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
vďaka za názornú ukážku. mne sa to (Outlook 2003) nespracuje správne a do poľa Subject vypíše všetko ako text (i s iso charakteristikou). hold asi univerzálne riešenie je odosielať emaily priamo cez formulár z webu.
Řešení 1× (danc)
mess avatar 13.11.2010 12:50 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Možná blbá otázka, ale přece se zeptám. Je nutné provádět takové harakiri s base64? Nestačí ten text prostě vepsat do té stránky ve stejném kódování, jako je ta stránka? Maximálně bych ho prohnal přes urlencode (a nahradit "+" za "%20%).

Pošlite mi email
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.
stativ avatar 13.11.2010 12:56 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Co se ale stane když bude mít klient jiné kódování než stránka? IMO se to rozhodí.
Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
14.11.2010 21:44 danc | skóre: 21 | blog: Blog nejen o Linuxu | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
melo by fungovat co pise mess - tzn. urlencode a nahradit "+" za "%20"

presne takhle jsem to udelal, kdyz jsem resil podobny problem, vyzkouseno v Mozille i Outlooku, stranky jsou v UTF-8
14.11.2010 22:39 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Příloha:
vyskúšal som to s týmto kódom: header('Content-Type: text/html; charset=utf-8'); $pokusnytext=urlencode("234 ľščťž"); echo '<a href="mailto:aaa@aaa.aa?subject= =?utf-8?q?'.$pokusnytext.'Server_linux=2Ecz=3A_Upozorn=ECn=ED_na_=FA=E8ast_?= =?iso-8859-2?q?v_konferenc=EDch?= "> odosli email </ a>';

ale outlook2003 si s tým neporadí (viď obrázok)
14.11.2010 23:16 danc | skóre: 21 | blog: Blog nejen o Linuxu | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
ne, zadny quoted printable - podivej se / zkus si kliknout na odkaz "poslite mi email" ktery postnul o kousek vys mess

tzn. neco na zpusob

echo '<a href="mailto:aaa@aaa.aa?subject='.urlencode('předmět').'&body='.urlencode('tělo').'">klik</a>';

nevim jak Outlook 2003, ale kolega v praci pouziva Outlook 2007 a myslim i 2010 a myslim ze mu to funguje (nestezoval si :-)
14.11.2010 23:18 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
A co tohle ?

odosli email

<a href="mailto:aaa@aaa.aa?subject=Server linux.cz: =?UTF-8?B?VXBvem9ybsSbbsOtIG5hIMO6xI1hc3QgdiBrbw==?= =?UTF-8?B?bmZlcmVuY8OtY2g=?= "> odosli email </a>

Prostě když chceš změnit kodování tak ten text musíš taky překodovat, tvůj text se mi taky nezobrazuje správně, v utf je správný tento.

Prostě si musíš udělat pořádky a správně překodovat znaky.

A mělo by to fungovat i v win.

14.11.2010 23:32 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
páni, ďakujem Vám za snahu. Mám veľmi silný dojem, že je to chyba Outl.2003 - nezobrazuje sa tam žiaden text správne (ani messov), skúsim to vyskúšať v iných klientoch. ešte raz vám ďakujem.
15.11.2010 10:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Přílohy:
Není to o OS je to o e-mail klientovi.
  • M$ Outlook - potřebujete kódování Windows-1250, Ověřeno na: WindowsXP 32/64, Outlook 2003/2007.
    Příloha mso2007.PNG a mso2003.PNG ukazuje klik na zakódovaný text a na text v UTF-8.
  • Evolution - potřebujete kódování UTF-8 (asi proto, že systém je v UTF-8 .. jen spekulace) jinak se chová jako Outlook, Ověřeno na: Debian Lenny (obrázek nepřiložen, ale snad věříte :))
  • Thundebird - bere to co zde píšete, nebo i klasické UTF-8 (asi proto že stránka je UTF-8 .. jen spekulace), Ověřeno na: Win Vista.
    Příloha thunderbird.PNG to ukazuje
Závěrem, samozřejmně jsem tímto nevyloučil například to, že ve Vistách na Outlooku to sežere UTF-8 apod.
Ale každopádně je z toho jasné, že universální řešení touto cestou prostě není.
Smiřte se s tím, že spolehlivě předáte jen ASCII znaky :).
Ja to vidím, že „řešením problému je“:
  • a) předávat jen ASCII znaky
  • b) formulář do stránky a jeho odeslání scriptem ze strany serveru
  • c) udělat libovolnou výše uvedenou variantu a kašlat na to, že velké skupině lidí se to nezobrazí správně
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
15.11.2010 12:41 danc | skóre: 21 | blog: Blog nejen o Linuxu | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Rekl bych, ze to mozna nezavisi na klientovi, ale spis na vychozim kodovani v operacnim systemu.

Ja jsem tohle zprovoznil pro vnitrofiremni komunikaci (ve variante urlencoded text v UTF-8), takze jsem nemusel resit nekonecne mnozstvi kombinaci klientu + OS. Mam overeno, ze to funguje v Outlooku na Windows 7 (asi uz taky pouzivaji nativne UTF-8) i v Mozille na Linuxu.

Stejne ale nabizim dva odkazy na preddefinovane maily - bez diakritiky a s diakritikou. Takze pokud by to u nekoho zlobilo, at si to posle v ASCII...
15.11.2010 14:59 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Upřesnění:
Znaková sada, může být, nicméně pokud nemáte kontrolované prostředí, tak nevíte kdo co používá…
Ale 'quoted printable' text (začínající =?UTF-8?Q?) Outlook ani Evolution nežere, pojídá ho jen Thundebird tzn, závisí to na e-mail klientovi.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
stativ avatar 11.11.2010 19:28 stativ | skóre: 54 | blog: SlaNé roury
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
len sa obavam, ze to neni univerzalne riesenie a na inej masine by to mohlo byt tiez rozhadzane.

Myslím, že v tomhle máš zcela pravdu. Závisí to na tom, jaké kódování používá klient. CP1250 ti bude určitě fungovat na českých Windows, ale pokud to bude něco jiného je dost pravděpodobné, že to selže.

Nejspíš bys ani nemusel používat převod do HEX ale jen nastavit správný content type té stránky. Problém ale zůstane – bude to zase záviset na tom, že mail klient i stránka používají stejné kódování.

Část problémů by se dala odfiltrovat zjištěním jaké kódování používá prohlížeč přes user agent accept-encoding, ale opět – prohlížeč a mail klient mohou používat jiná kódování.

Podle mě tohle stoprocentně vyřešit nejde. Kdyby ses na diakritiku vykašlal tak by sis ušetřil hodně starostí a možných problémů. Pokud to má být něco pro komunikaci, tak je ještě možnost vytvořit nějaký formulář na odesílání mailů

Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
11.11.2010 19:40 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
stativ, diky moc. presne si vystihol moje dojmy. evidentne asi jediné univerzálne riešenie bude spraviť formulár, a odosielať cez neho. akurát sa uživateľovi trošku "znekomfortní" pridávanie emailových adries, nakoľko nebude mať možnosť si priamo nájsť vo svojom adresári adresu príjemcu. diky za radu.
rADOn avatar 11.11.2010 19:16 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Smarjapano tomhle rikam cargokultovni programovani. Napodobujes neco co jsi nekde videl aniz bys mel tuseni co to vlastne je. Zahod knizku o php a precti si nejdriv neco o HTTP.

Na strkani retezcu do url nepotrebujes zadnej "hex", ale funkci urlencode() ktera prekoduje string tak aby byl pouzitelny v url. Retezec musi byt ve stejnem kodovani jako zbytek dokumentu. Viz rfc1738.

"2^24 comments ought to be enough for anyone" -- CmdrTaco
11.11.2010 19:34 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
nemyslim si... ked je v jednom dokumente vlozeny echo "text text text" tak bude mat kodovanie dokumentu (ak teda neuvazujeme o iconv na ine kodovanie). urlencode sa pouziva na url a dost pochybuje, ze pomoze za mailto:... napr. tie "+" medzi slovami... vsetko je evidentne otazka pouziteho kodovania priamo v mailovom kliente a preto diakritiku z webu zobrazí blbo, hold mi len neni jasne, preco ked php skript je v utf8 a defaultne email.klient tiez, tak sa po kliku na mailto nezobrazi diakritika spravne... ale ked to este v php skripte prehodim na win1250 do formatu HEX, v mailovom kliente sa to zobrazi ok. zvlastne...
rADOn avatar 12.11.2010 18:04 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
nemyslim si...
Nemyslis si? Clovek by skoro rekl ze ja jsem ten komu to nefunguje.

BTW zkusil jsem si to a v opere i firefoxu se spravne otevrou i neenkodovany mailto: odkazy, takze mas blbe i kodovani dokumentu. A vysvetlovat kodovani a nastavovani http hlavicek nekomu kdo podle vlastnich slov nemysli :-), na to v patek vecer nemam nervy.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
12.11.2010 19:18 adrinko | skóre: 22
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
počuj expert, čo keby si namiesto trepania skúsil napísať príklad html kódu, na ktorom by som mohol odskúšať to, čo tu vlastne píšeš? skúšal som všetky rady, na všetkom defaultne používam utf-8, a nikdy sa mi to nezobrazilo správne. čo sa FF a opery týka - to je snáď iná kapitola... nehovoril som, že sa mi to zobrazuje blbo v prehliadači, ale až keď kliknem na "a href" a otvorí sa okno emailového klienta.

P.S. vieš vôbec aký je vôbec rozdiel medzi "nemyslieť" a "nemyslieť si"? to bude asi tá jazyková bariéra... škoda len, že tak skoro nastala po 1993-treťom. Inak tvoja veta "Kodovani urcis tak ze ho urcis." je bohovská... Takže skúsme menej osočovania a viac produktívnych príspevkov. Diky
rADOn avatar 16.11.2010 19:59 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Vyzkoušeno na následujícím kódu a kmailu:
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <style></style>
  </head>
  <body>
  <a href="mailto:test@test.cz?subject=ěščřžýáíé">link</a>
  <a href="mailto:test@test.cz?subject=%C4%9B%C5%A1%C4%8D%C5%99%C5%BE%C3%BD%C3%A1%C3%AD%C3%A9">link</a>
  </body>
</html>
čo sa FF a opery týka - to je snáď iná kapitola...
Prohlížeč je úplně první a základní kapitola, protože právě prohlížeč to musí překódovat ze znakové sady dokumentu (deklarované v http hlavičkách) překódovat do znakové sady systému (ve které se předávají parametry mezi programy). Ty jako autor stránky nemůžeš vědět jaké kódování používá cílový systém, a poštovní program nemůže vědět v jakém kódovaní byla stránka ze které parametry pochází, pouze prohlížeč zná obojí a může to zkonvertovat správně. Pokud víš, že je to správně, všechno ostatní je chyba poštovního klienta.
Inak tvoja veta "Kodovani urcis tak ze ho urcis." je bohovská...
Možná bohovská, ale pravdivá. Hlavičku Content-Type posílá server, tedy si ji můžeš určit ty. Pokud máš v ruce dokument v jiném kódování, můžeš překódovat dokument nebo změnit hlavičku - obě řešení jsou zcela ekvivalentní.
Takže skúsme menej osočovania a viac produktívnych príspevkov.
Když jsem se ti produktivně pokusil poradit, odpověděl jsi že si "nemyslíš" že je to správě, aniž by ses obtěžoval to vyzkoušet. Taková přezíravost vůči někomu kdo se ti snaží poradit je sprosťárna, a jestli jsem tě urazil, tak věz, že to byl záměr a zasloužil sis to.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
mess avatar 11.11.2010 16:50 mess | skóre: 43 | blog: bordel | Háj ve Slezsku - Smolkov
Rozbalit Rozbalit vše Re: php konverzia ASCII do HEX
Odpovědět | | Sbalit | Link | Blokovat | Admin
  1. Musíš si určit, v jakém to chceš kódování, doporučuju nějaké jednobytové. Třeba ISO-8859-2
  2. Pokud si vybereš unicode, tak používej multibyte funkce (mb_...). Navíc můžeš mít každý znak na jiném počtu bytů (to nemusí nutně vadit).
  3. Pokud budeš převádět řetězcovou konstantu, tak ten zdrojový soubor musí být v tom požadovaném kódování.
  4. Na převod kódování dobře poslouží fce iconv (viz www.php.net). Musíš ale vědět, z jakého kódování budeš převádět.
Cez párne mesiace zošíváš vaginy, cez neparne montuješ hajzle.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.