Autor Zpráva
Rieltor
Profil *
Na své stránky jsem umístil kontaktní formulář.
Odeslání dat na můj mail zajišťuje stránka v PHP.
Tento kód funguje v češtině bez problémů:

$Zprava = StrTr($Zprava, "\x8A\x8D\x8E\x9A\x9D\x9E", "\xA9\xAB\xAE\xB9\xBB\xBE");
$Zprava = base64_encode($Zprava);

$Hlavicka = "MIME-Version: 1.0 \n".
    "Content-Type: text/plain; charset=\"iso-8859-2\" \n".
     "Content-Transfer-Encoding: base64 \n";

Jenže, když někdo do formuláře napíše text v ruštině,
přijdou mi na mail nečitelné nesmysly.
Jak mám udělat, aby to fungovalo v češtině a ruštině zároveň?
Děkuji předem za odpověď. Raději polopatě. Jsem začátečník.
lionel messi
Profil
Rieltor:
Jak mám udělat, aby to fungovalo v češtině a ruštině zároveň?

Použil by som kódovanie UTF-8, ktoré je na rozdiel od ISO 8859-2 použiteľné pre všetky znakové sady (čiže napr. latinku obohatenú o českú diakritiku a azbuku) súčasne.

Možno robí neplechu aj prekódovanie do base64 a následné dekódovanie, ale k tomu sa už fundovane vyjadriť nedokážem.
Rieltor
Profil *
Už jsem to zkusil:
"Content-Type: text/plain; charset=\"utf-8\" \n".

Nicméně to nepomohlo. A v češtině navíc chyběly české znaky.

Dokonce jsem zkusil mail přesměrovat na jinou moji mailovou adresu.
Výsledek je stejný.
Keeehi
Profil
Rieltor:
To že pošleš jen jinou hlavičku nestačí. I samotný obsah zprávy musí být v tom kódování.
Rieltor
Profil *
Asi to dělám špatně, protože toto nefunguje:
$Zprava = StrTr($Zprava, "\x8A\x8D\x8E\x9A\x9D\x9E", "\xA9\xAB\xAE\xB9\xBB\xBE");
  $Zprava = base64_encode($Zprava);
  $Zprava = utf8_encode($Zprava);

Prosím polopatě. Děkuji.
Keeehi
Profil
Rieltor:
Zaprvé změna kódování můsí být určitě před prřevedením na base64.
Zadruhé utf8_encode kóduje z ISO-8859-1. Jsi si jistý, že máš toto kódování? Pokud ne, musíš použít jinou funkci. Třeba iconv.
Rieltor
Profil *
Taky jsem pak dospěl k funkci iconv():

$Zprava = iconv("CP1250", "UTF-8//TRANSLIT", $Zprava);
$Zprava = base64_encode($Zprava);
  
$Hlavicka = "MIME-Version: 1.0 \n".
               "Content-Type: text/plain; charset=\"utf-8\" \n".
               "Content-Transfer-Encoding: base64 \n";
               

Čeština nyní funguje bez problémů.
Ovšem ruština se zase převede na HTML entity.
Rieltor
Profil *
Tak už jsem na to přišel! Kupodivu to bylo jednoduché.
Chtělo to změnit kódování obou stránek (formulář i obslužný PHP skript)
na kódování UTF-8.
Pak se stala zbytečnou i funkce iconv().

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: