Autor Zpráva
Adam233
Profil *
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
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 *
konečně jsem to zprovoznil, děkuji za radu
Adam233
Profil *
ještě jsem se chtěl zeptat jak mám script upravit, aby diakritika fungovala i na jmeno odesilatele?
Adam233
Profil *
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
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 *
funguje, mnohokrát děkuji

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0