Autor Zpráva
Tomb
Profil
Čau klucí, potřebuju vyřešit problém s kódováním v php skriptu, který odesílá formulář na mail.

Použil jsem toto, což jsem našel někde tady v diskuzi:

/* *************** diskuse.jakpsatweb.cz *** PHP FAQ ********************** */
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));
          $stav = mail ($to, $predmet, $zprava, $head);
          return $stav ?  TRUE : FALSE;  }
/* ********************************************************************** **  */


ale v mailu to zobrazuje špatně ě, č, ř

v hlavičce toho skriptu mam jen toto:
<meta http-equiv="content-type" content="text/html; charset=windows-1250">


Co je třeba změnit?
Alphard
Profil
hmm, na hlavičce nezáleží, script by si měl zjistit kódování a převést do UTF, zobrazuje se to špatně v předmětu nebo ve zprávě?
anonymní
Profil *
Ahojky, mám stejný problém.
Když mi přijde mail ze stránek, tak se mi v předmětu místo písmen ý a á zobrazují otazníky a ve zprávě mám místo š obdelníček. Neporadíte mi někdo, jak to vyřešit?

Díky
Alphard
Profil
Tomb
sám to nevyřeším, mně to funguje, musíte mi popsat vaši situaci

anonymní
používáte výše uvedený script? pokud ano, tak napište více podrobností
Tomb
Profil
Alphard
na tomto odkazu mám formulář.

A tohle je celý skript:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Odesílání emailu</title>
</head>
<body>
<h4>Kontaktní formulář</h4>

<?
/* *************** diskuse.jakpsatweb.cz *** PHP FAQ ********************** */
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));
          $stav = mail ($to, $predmet, $zprava, $head);
          return $stav ?  TRUE : FALSE;  }
/* ********************************************************************** **  */

$jmeno = $_POST['jmeno'];
$mail = $_POST['mail'];
$predmet = $_POST['predmet'];
$zprava = $_POST['zprava'];
$spam = $_POST['spam'];

if {
Mail("bulinmartin@gmail.com", $predmet, $zprava, "From: " . $mail);
echo "<p><strong>Mail byl úspěšně odeslán.</strong>.</p>";
}
else
{
echo "<p>Mail se <strong>nepodařilo</strong> odeslat! Pravděpodobně jste nevyplnili všechny povinné údaje, nebo nevíte kolik je 1 + 1.</p>";
} 
?>

</body>
</html>


a když vyplním pole předmět i pole zpráva tímto: ěščřžýáíé, tak v tom výslednym mailu se místo toho objeví toto: ìšèøžýáíé a to jak v předmětu tak ve zprávě.
nightfish
Profil
používáš mail() místo cs_mail()

EDIT: nehledě na to, že za if máš chlupatou (složenou) závorku místo kulaté
Tomb
Profil
nightfish
nahradil jsem Mail za cs_mail a skript přestal fungovat.

a ty závorky jsem taky změnil takže to vypadá takhle:
if (
cs_mail("bulinmartin@gmail.com", $predmet, $zprava, "From: " . $mail);
echo "<p><strong>Mail byl úspěšně odeslán.</strong>.</p>";
)
else
(
echo "<p>Mail se <strong>nepodařilo</strong> odeslat! Pravděpodobně jste nevyplnili všechny povinné údaje, nebo nevíte kolik je 1 + 1.</p>";
) 


Nemohl bys mi prosím tuto část opravit aby to bylo správně? Já jsem na to fakt asi uplně dutej :D
yFang
Profil
Tomb
Nemělo by to být takhle?
if (cs_mail("bulinmartin@gmail.com", $predmet, $zprava, "From: " . $mail))
{
echo "<p><strong>Mail byl úspěšně odeslán.</strong>.</p>";
}
else
{
echo "<p>Mail se <strong>nepodařilo</strong> odeslat! Pravděpodobně jste nevyplnili všechny povinné údaje, nebo nevíte kolik je 1 + 1.</p>";
} 
Tomb
Profil
yFang
Vypíše to, že mail byl úspěšně odeslán, ale na mail mi nic nepřijde....
Alphard
Profil
zkuste tohle
if (cs_mail("bulinmartin@gmail.com", $predmet, $zprava, "From: " . $mail . "\n"))
  echo "<p><strong>Mail byl úspěšně odeslán.</strong>.</p>";
 else
  echo "<p>Mail se <strong>nepodařilo</strong> odeslat! Pravděpodobně jste nevyplnili všechny povinné údaje, nebo nevíte kolik je 1 + 1.</p>";


závorky jsem vyházel jen kvůli zpřehlednění, podstatné by mělo být "\n" za hlavičkou
Tomb
Profil
Alphard
No paráda, už to běží.

Jste fakt super, díky
Alphard
Profil
No paráda, už to běží.
Jste fakt super, díky


no jo, hlavně že k tomu píši příklad použití :-)
chef06
Profil *
Ahoj, potrebuju pomoc prosim... mam formular na odesilani udaju, a nezobrazuji se mi v něm některe znaky (ť, ž, š)... zkusil jsem toho hodne, ale nic mi nepomohlo... Pridavam kod, mohl by mi to nekdo upravit na miru prosim, diky...

KOD:
<?
/* *************** diskuse.jakpsatweb.cz *** PHP FAQ ********************** */
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));
          $stav = mail ($to, $predmet, $zprava, $head);
          return $stav ?  TRUE : FALSE;  }
/* ********************************************************************** **  */

     if (isset($_POST['poslani'])) {
     $canxy = null;

          if (strlen($_POST['zudaje'])>0 ) {
     $jmeno = true; }
     else {
     $jmeno = false;
     echo "<p class=text><b>Nezadali jste název zboží</b></p>";  }

       if (strlen($_POST['napis'])>0 ) {
     $prijmeni = true; }
     else {
     $prijmeni = false;
     echo "<p class=text><b>Nezadali jste nápis na polštářek</b></p>";  }

           if (strlen($_POST['rozmer'])>0 ) {
     $nick = true; }
     else {
     $nick = false;
     echo "<p class=text><b>Nezadali jste rozměr polštářku</b></p>";  }

           if (strlen($_POST['material'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste materiál polštářku</b></p>";  }

      if (strlen($_POST['model'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste model polštářku</b></p>";  }

     if (strlen($_POST['barvapozadi'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste barvu pozadí polštářku</b></p>";  }

      if (strlen($_POST['barvanapisu'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste barvu nápisu polštářku</b></p>";  }

      if (strlen($_POST['pocet'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste počet polštářku</b></p>";  }

      if (strlen($_POST['jmenoprijmeni'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste vaše jméno a příjmení</b></p>";  }

      if (strlen($_POST['adresa'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste vaší adresu</b></p>";  }

      if (strlen($_POST['psc'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste vaše PSČ</b></p>";  }

      if (strlen($_POST['mesto'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste vaše město</b></p>";  }

      if (strlen($_POST['email'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste váš email</b></p>";  }

      if (strlen($_POST['mobil'])>0 ) {
     $email = true; }
     else {
     $email = false;
     echo "<p class=text><b>Nezadali jste váš mobil</b></p>";  }






     if ($zudaje && $napis && $rozmer && $material && $model && $barvapozadi && $barvanapisu && $pocet
     && $jmenoprijmeni && $adresa && $psc && $mesto && $email && $mobil) {
     $zprava =  "Objednávka:\n
     Adresa objednávajícího:
     JMENO A PŘÍJMENÍ: {$_POST['jmenoprijmeni']}
     ADRESA: {$_POST['adresa']}
     PSČ: {$_POST['psc']}
     MĚSTO: {$_POST['mesto']}
     EMAIL: {$_POST['email']}
     MOBIL: {$_POST['mobil']}
     ------------------------------------------------
     Objednávka zboží:
     NÁZEV ZBOŽÍ: {$_POST['zudaje']}
     MODEL: {$_POST['model']}
     NÁPIS: {$_POST['napis']}
     BARVA NÁPISU: {$_POST['barvanapisu']}
     BARVA POZADÍ: {$_POST['barvapozadi']}
     ROZMĚR: {$_POST['rozmer']}
     MODEL: {$_POST['model']}
     POČET: {$_POST['pocet']}
     POZNÁMKA: {$_POST['poznamka']}\n\n
     Děkujeme za objednávku. Ihned jak ji začneme zpracovavat, budeme Vás kontaktovat na vas email.\n
    Dotaz byl zaslán z internetové adresy ";
 mail ($_POST['email'], 'Kopie dotazu', $zprava,
'Od: info@azurehamaj.cz');
mail ($_POST['emailing'], 'Objednávka ', $zprava,
'Od: info@azurehamaj.cz');
echo "<p class=stred>Váše objednávka z adresy --- byla úspěšně odeslána. Kopii vašeho dotazu naleznete také na
<b>{$_POST['email']}</b>. Budeme se snažit Vám v nejkratší době odpovědět.";
exit(); }

               else {
     $canxy .=  '<p class=text>Vaše objednávka nemohla být dokončena. Nezadali jste všechny údaje. Vrattě se prosím zpět <input type=button onclick="history.back()" value="Zpět"></p>'; } }

         if (isset($canxy))   {
         echo '<font bgcolor="white">' ,$canxy ,'</font>'; }




    ?>


Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Alphard
Profil
Na řádcích 140 a 142 dej místo mail() funkci cs_mail().

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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