Autor Zpráva
igracek
Profil *
zdravim! mam site v utf-8 a funkci mail() odesilam zcela standardnim zpusobem mail. Mam problem s tim, ze email se odesle v jakemsi kodovani, ktere neumi nektere mailove servery (centrum a seznam napriklad, zatimco gmail zobrazi mail spravne s diakritikou). vygoogloval jsem jen to, ze lze pouzit fci mb_send_mail() s nastavenim mb_language("uni"). tohle ovsem na mem hostingu PHP4.3.10 neumi. dik za radu
ronnie
Profil
1. použít kódování v hlavičce nebo
2. použít funkcie icov
Broli
Profil
chtelo by to priklad
Kalda
Profil *
Tady máš pro ukázku převod Win-1250 -> ISO-8859-2

1) proveď překódování textu do požadovaného kódování (lepší je použít iconv, tohle je i pro starší verze PHP)

$_POST['text'] = StripSlashes(StrTr($_POST['text'], "\x8A\x8D\x8E\x9A\x9D\x9E","\xA9\xAB\xAE\xB9\xBB\xBE"));

2) pošli mail s MIME hlavičkou s potřebným kódováním

mail('komu', 'predmet', $_POST['text'], "From: odkoho<odkoho@email.xx>\nMIME-Version: 1.0\nContent-Type: text/plain; charset=\"iso-8859-2\"");
nostradam
Profil
Stale jsem se nemohl vyporadat s tim proc se telo zpravy prichazelo kodovane spravne ale hodnoty reply-to: from: a to: mi chodily zakodovane us-ascii a to delalo silenou neplechu, trochu jsem hledal a nakonec na php.net to uz resil jeden japonec. Tento testovaci script, se kterym jsem experimentoval byl ulozeny jako text.php a byl ulozeny v kodovani UTF-8.

Takhle nejak to vypada:
<pre>
<?
// test podle japanese
$charset = "UTF-8"; // funguje i s ISO-88592-2 a windows-1250
$to = encode("ěščřžýáíé", $charset) . " <xxx@xxx.xx>";
$from = encode("ěščřžýáíé", $charset) . " <xxx@xxx.xx>";
$subject = encode("TESTIK ěščřžýáíé ĚŠČŘŽÝÁÍÉ", $charset);
$message = "NENI NENI TREBA PREKODOVAVAT ěščřžýáíé ĚŠČŘŽÝÁÍÉ";

$email_header = "Reply-To: ". $from ."\n";
$email_header .= "From: ". $from ."\n";
$email_header .= "Content-transfer-encoding: 7bit\n";
$email_header .= "Content-type: text/plain; charset=\"UTF-8\"\n\n";

mail($to, $subject, $message, $email_header);

function encode($in_str, $charset) {
$out_str = $in_str;
if ($out_str && $charset) {

// define start delimimter, end delimiter and spacer
$end = "==?=";
$start = "=?" . $charset . "?B?";
$spacer = $end . "\r\n " . $start;

// determine length of encoded text within chunks
// and ensure length is even
$length = 75 - strlen($start) - strlen($end);
$length = floor($length/2) * 2;

// encode the string and split it into chunks
// with spacers after each chunk
$out_str = base64_encode($out_str);
$out_str = chunk_split($out_str, $length, $spacer);

// remove trailing spacer and
// add start and end delimiters
$spacer = preg_quote($spacer);
$out_str = preg_replace("/" . $spacer . "$/", "", $out_str);
$out_str = $start . $out_str . $end;
}
return $out_str;
}
?>
</pre>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0