Autor | Zpráva | ||
---|---|---|---|
Adam233 Profil * |
#1 · Zasláno: 7. 6. 2010, 17:00:10
Dobrý den,
omlouvám se, že zakládám další nové téma na toto téma, ale ve starších tématech se mi mi bohužel nepovedlo najít řešení mého problému. Mohl by mi prosím někdo poopravit zdrojový kód, tak aby příchozí email obsahoval zprávné znaky (zejména š a ž), teď jsou buďto vynechány nebo nahrazeny čtverečky s čísly. předem děkuji <form action="druhy.php" method="post"> Jmeno: <input name="jmeno"><br> Mail příjemce: <input name="prijemce"><br> Váš mail: <input name="mail_odesilatele"><br> Předmět: <input name="predmet"><br> Zpráva: <textarea name="zprava"></textarea><br> <input type=submit value="Odeslat"> </form> druhy.php <?php function autoUTF($s) { // detect UTF-8 if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; // detect WINDOWS-1250 if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); // assume ISO-8859-2 return iconv('ISO-8859-2', 'UTF-8', $s); } function cs_mail ($to, $predmet, $zprava, $mail_odesilatele, $head = "") { $subject = "=?utf-8?B?".base64_encode(autoUTF ($subject))."?="; $head .= "MIME-Version: 1.0\n"; $head .= "Content-Type: text/plain; charset=\"utf-8\"\n"; $head .= "Content-Transfer-Encoding: base64\n"; $zprava = base64_encode (autoUTF ($zprava)); return mail ($prijemce, $predmet, $zprava, $mail_odesilatele, $head); } $a = $_POST['zprava']; if (mail($prijemce, $predmet, $zprava, "From: " . $jmeno . '<' . $mail_odesilatele . ">\n")) echo "Mail byl odeslán"; else echo "Mail se nepodařilo odeslat"; ?> |
||
Davex Profil |
#2 · Zasláno: 7. 6. 2010, 20:22:14
1) spoléháš na povolené register_globals - raději používej pro čtení hodnot z formuláře pole $_POST
2) funkce cs_mail() je nevhodnými zásahy rozbitá - použij funkční z Nejčastější potíže s PHP (FAQ) 3) na řádku 25 je potřeba volat funkci cs_mail() |
||
Adam233 Profil * |
#3 · Zasláno: 7. 6. 2010, 21:06:54
konečně jsem to zprovoznil, děkuji za radu
|
||
Adam233 Profil * |
#4 · Zasláno: 8. 6. 2010, 22:01:47
ještě jsem se chtěl zeptat jak mám script upravit, aby diakritika fungovala i na jmeno odesilatele?
|
||
Adam233 Profil * |
#5 · Zasláno: 8. 6. 2010, 22:05:19
zde je používaný script
<?php function autoUTF($s) { // detect UTF-8 if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; // detect WINDOWS-1250 if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); // assume ISO-8859-2 return iconv('ISO-8859-2', 'UTF-8', $s); } function cs_mail ($to, $predmet, $zprava, $head = "") { $predmet = "=?utf-8?B?".base64_encode(autoUTF ($predmet))."?="; $head .= "MIME-Version: 1.0\n"; $head .= "Content-Type: text/plain; charset=\"utf-8\"\n"; $head .= "Content-Transfer-Encoding: base64\n"; $zprava = base64_encode (autoUTF ($zprava)); return mail ($to, $predmet, $zprava, $head); } $a = $_POST['zprava']; if (cs_mail($prijemce, $predmet, $zprava, "From: " . $jmeno . '<' . $mail_odesilatele . ">\n")) echo "Mail byl odeslán"; else echo "Mail se nepodařilo odeslat"; ?> |
||
Davex Profil |
#6 · Zasláno: 8. 6. 2010, 23:13:10
Zkusil bych to nějak takto, ale mělo by se to vyzkoušet (patří to třeba na řádek č. 24).
$jmeno = empty($_POST['jmeno']) ? '' : '=?utf-8?B?' . base64_encode(autoUTF($_POST['jmeno'])) . '?= '; |
||
Adam233 Profil * |
#7 · Zasláno: 8. 6. 2010, 23:27:29
funguje, mnohokrát děkuji
|
||
Časová prodleva: 14 let
|
0