Autor Zpráva
tony
Profil
Ahoj programátoři.

Měl bych menší dotaz, jsem začátečník.. Mám problém s email-formulářem, resp. s diakritikou.
Mám následující skript a chtěl jsem si to vyzkoušet jak to funguje, abych trochu nakouknul a pochopil jak to funguje a jak se to dělá..

Ten script je (soubor register.php):

<?php

header("Content-Type: text/html; charset=utf-8");

function array_item($ar, $key) {
  if(array_key_exists($key, $ar)) 
    if (get_magic_quotes_gpc()) {
      return stripslashes($ar[$key]); 
    } else {
      return $ar[$key]; 
    }
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>formulář</title>

  <meta http-equiv="Content-Type" content="text/html;  charset=utf-8">

</head>
<body>
<h1>formulář</h1>
<form method="POST" action="register.php">
<?php
$submit = array_item($_POST, 'submitbutton');
$fname = array_item($_POST, 'fname');
$lname = array_item($_POST, 'lname');
$email = array_item($_POST, 'email');
$cdate = $_POST['cdate'];
if ($submit == 'Registrovat') {
  } else {
    print "<pre>\n";
    print "Křestní jméno:    ".  htmlspecialchars($fname)."\n";
    print "Příjmení:     ".  htmlspecialchars($lname)."\n";
    print "E-mail:        ".  htmlspecialchars($email)."\n";
    print "Datum:  ".$cdate."\n\n";
    print "<input type=\"submit\" name=\"submitbutton\"
      value=\"Potvrdit\"> ";
    print "<input type=\"submit\" name=\"submitbutton\"
      value=\"Opravit\"></pre>\n";
    print "<input type=\"hidden\" name=\"fname\"
      value=\"".htmlspecialchars($fname)."\">";
    print "<input type=\"hidden\" name=\"lname\"
      value=\"".htmlspecialchars($lname)."\">";
    print "<input type=\"hidden\" name=\"email\"
      value=\"".htmlspecialchars($email)."\">";
    print "<input type=\"hidden\" name=\"cdate\"
      value=\"".$cdate."\">";
    print "</form></body></html>";
    exit();
  }
} else if ($submit == 'Potvrdit') {
  $mailtext = "$fname\t$lname\t$email\t$cdate\n";
  mail("xxx@xxx.cz", "Nová registrace", $mailtext, 
      "From: xxx@xxx.cz");
  print "<p>Odesláno!</p>";
  exit();
}
?>
<table border="2">
<tr>
  <td>Křestní jméno
  <td><input type="text" name="fname" 
  value="<?php echo htmlspecialchars($fname); ?>" size="30">
</tr>
<tr>
  <td>Příjmení
  <td><input type="text" name="lname" 
  value="<?php echo htmlspecialchars($lname); ?>" size="30">
</tr>
<tr>
  <td>E-mail:
  <td><input type="text" name="email" 
  value="<?php echo htmlspecialchars($email); ?>" size="30">
</tr>
<tr>
  <td>Datum:
  <td>
    <select name="cdate">
      <option value="20041105" 
      <?php if ($cdate == '20041105') print "selected"; ?>
      >2004-11-05</option>
      <option value="20041106"
      <?php if ($cdate == '20041106') print "selected"; ?>
      >2004-11-06</option>
      <option value="20041107"
      <?php if ($cdate == '20041107') print "selected"; ?>
      >2004-11-07</option>
    </select>
</tr>
</table>
<i>(všechna pole musí být vyplněna)</i>
<p><input type="submit" name="submitbutton" value="Registrovat"></p>
</form>
</body>
</html>


Problém je v tom, že se nezobrazuje diakritika, nebo jen otazníky místo ěščřžýáíé.
Nejde mi o funkce ve scriptu atd. jen o tu diakritiku.
Data zapsaná do formuláře se odešlou na příslušný mail jak mají.

1) ALE je problém s tím, že jakmile uvedu kodování utf-8 (v řádcích: header("Content-Type: text/html; charset=utf-8"); a <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> ) všechna data zadaná do formuláře (jméno, příjmení, email) se v poho odešlou a v emailové zprávě se bezva zobrazí včetně ěščřžýáíé. Ale stránka, kde se tento formulář nachází, kde je vložen je celá rozhozená diakritika a místo ěščřžýáíé jsou otazníky i v tom formuláři. A když upravím kodování i v té stránce na utf-8 je to stejné.

2) ALE jakmile uvedu kodování jiné např. windows-1250 (v řádcích: header("Content-Type: text/html; charset=windows-1250"); a <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> ) tak je situace taková, že stránka, kde se tento formulář nachází, kde je vložen je v poho ěščřžýáíé se zobrazí korektně i ve formuláři, ALE odeslaná data jsou špatná bez diakritiky s otazníky. Když napíšu příjmení třeba Hájek, v emailu se zabrazí jen H nebo Hjek..prostě blbě.

Tak nevím co s tím, kde je chyba. Zkoušel jsem to i na druhém kompu a stejný výsledek. Nikde jsem nenašel řešení.
Nevěděl by někdo co s tím? Jak to vyřešit? Měl by někdo nápad? Díky za každou případnou radu.
dad
Profil *
Nemáš soubor uložený ve formátu, který máš nastavéný v hlavičce tj. utf-08
Tomashekk
Profil
tony:
Já to dělám takto
      		$email_text = " Děkujeme za registraci na portálu Mopsweb. Zda-li chcete využívat všechny výhody registrovaného uživatele, pokračujte navštívením níže napsaného odkazu. Zda-li je toto omyl, prosím, ignorujte tuto zprávu. \n http://mops.cz.uvirt16.active24.cz/green/index.php?page=auth&a=$mdnick&b=$mdpass \n";
      		$headers  = 'MIME-Version: 1.0' . "\r\n";
      		$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
      		
      		// Additional headers
      		$headers .= 'To: You <'.$zprava.'>' . "\r\n";
      		$headers .= 'From: Registrace Mopsweb <registrace@mops.cz>' . "\r\n";
      		
      			mail($email, "Reservation", $email_text, $headers);}
Alphard
Profil
tony:
Vše musí být uloženo ve stejném kódování a toto kódování musí být uvedeno na všech patřičných místech.

Ve FAQ máme script, který se snaží odhadnout kódování a dle potřeb překódovat. Můžete tedy vyzkoušet vaši variantu 2 (tj. správně zobrazené kódování stránky) + funkci cs_mail(). Ale zdůrazňuji, že lepší je samozřejmě sjednotit všechna kódování.
tony
Profil
Děkuju všem za odpověď, za radu. To bude asi ten problém, že to nemám uložené v tom kódování. To zkusím dát do pořádku. Snad to bude celý problém.
Díky! :-)
Restin
Profil *
Používám skript z FAQ, ale nefunguje (email nedorazí, zkoušeno na gmail + seznam). Nevíte někdo, čím by to mohlo být? Je to rozhodně tím skriptem - zkoušel jsem zakomentovat tělo té funkce a email dojde, jen je zas na seznamu rozhozená diakritika jako bez skriptu...

Díky za tipy...

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:

0