Ahoj, mam problém s odesiálacím formulářem a kódováním. Hledala jsem ale nemůžu přijít, jak problém vyřešit.
Jak na stránce tak v editoru mám kodování windows-1250.
Posílám to metodou post.
Zkoušela jsem více kodování, ale windows-1250 se zobrazuje nejlépe, až tedy na š a ž . Místo toho mám čtverečky. Poradí mi někdo, jak to mám vyřešit?
Fórum › PHP
Odesílací formulář, diakritika
Co to je za formulaci? Vypadat dobre musi cokoliv, kdyz se to dobre udela :-D Trosku rozvin svuj problem...Zkoušela jsem více kodování, ale windows-1250 se zobrazuje nejlépe, až tedy na š a ž . Místo toho mám čtverečky. Poradí mi někdo, jak to mám vyřešit?
No stručně jasně to nepůjde, tak snad takhle:
<?
if($_POST['antispam']==4) {
if ( Mail("@.cz", $predmet, $zprava, "From: " . $mail_odesilatele) )
echo "<big>Váš email byl odeslán</big>";
else echo "<big>Mail se nepodařilo odeslat</big>";
}
else
{
echo "<big>Vyplňte prosím správně antispamovou ochranu.</big>";} ?>
- zpracovávací skript a teď stránka s formulářem :
<fieldset>
<legend> Odeslat email </legend>
<form method="post" action="zpracuj.php">
<input type="text" name="jmeno"> Jméno a příjmení:<br>
<input type="text" name="mail_odesilatele"> Váš email:<br>
<input type="text" name="predmet"> Předmět:<br><br>
<textarea rows="6" cols="60" name="zprava"></textarea>
<br><br>
Antispamová ochrana: 2+2 <input type="text" name="antispam" size="5">
<input type="submit" value="Odeslat">
</form>
</fieldset>
Mám dvě stránky. Obě jsou v kódování windows 1250. Ale když vyplním text ve formuláři a použiji diakritiku, tak na email mi přijde špatně kódovaná - místo š a ž přijde čtvereček.
Doufám, že je problém už zřejmý :)
To Janina : Nasel jsem na Googlu neco takoveho: http://forum.zive.cz/viewtopic.php?t=22195 - mohlo by to vyresit tvuj problem.
A nebo muzes pouzit muj styl s prekodovanim obsahu a predmetu:
$hlavicka ="From:domena@domena.tld\n";
$hlavicka.= "MIME-Version: 1.0\n";
$hlavicka.= "Content-Type: text/plain; charset=\"windows-1250\"\n";
$hlavicka.= "Content-Transfer-Encoding: base64\n";
$predmet = "ěščřžýáíé";
$obsah = "ěščřžýáíé";
$encodedsubject = base64_encode ($predmet);
$predmet = "=?windows-1250?B?$encodedsubject?=\r\n";
$obsah = base64_Encode($obsah);
$posli = mail("prijemce@domena.tld", $predmet,$obsah,$hlavicka);
Mám dvě stránky. Obě jsou v kódování windows 1250. Ale když vyplním text ve formuláři a použiji diakritiku, tak na email mi přijde špatně kódovaná - místo š a ž přijde čtvereček.
Doufám, že je problém už zřejmý :)
:smile4:
díky, vyzkouším to
Všimla jsem si, že ve spoustě skriptů je u toho kontaktního formuláře action="" nebo action="."
1. - znamená to, že se obsluhuje skript sám?
2. - nechápu, proč je tam ta tečka, jaký má význam, tipla bych si, že žádný, je to tak?
Prosim Vás, pomozte, opravdu už do toho koukam dlouho. Možná nechápu souvislosti, ale...zkuste mi to prosím opravit.
<?
function CZMail($to, $subj, $zprava, $headers = "")
{
$zprava = StrTr($text,
"\x8A\x8D\x8E\x9A\x9D\x9E",
"\xA9\xAB\xAE\xB9\xBB\xBE");
$zprava = Base64_Encode($text);
$headers .= "MIME-Version: 1.0\n".
"Content-Type: text/plain; charset=\"iso-8859-2\"\n".
"Content-Transfer-Encoding: base64\n";
if($_POST['antispam']==4) {
Mail("email", $subj, $zprava, $headers,"From: ". $mail_odesilatele);
echo "<big>Váš email byl odeslán a čeká na vyřízení.</big>";
}
else
{
echo "<big>Vyplňte prosím správně antispamovou ochranu.</big>";}
}
?>
Samozřejmě místo emailu mám nějký platný email. Ale co se mi s tím děje teď?
Vyplním formulář, odešlu, nevypíše se ani chybová hláška ani nic. A mail také nedorazí.
Dík za váš čas.
Mail("email", $subj, $zprava, $headers,"From: ". $mail_odesilatele);
Myslím, že to "From: ..." by malo byť v $headers. Keď máš dokument vo windows-1250, prečo máš v $headers iso-8859-2? Skús tam dať utf-8 alebo windows-1250. Zbytočne si komplikuješ život. Ja som v $headers nastavil kódovanie a normálne som posielal maily s diakritikou. Nemôžem ti ukázať kód, lebo mám všetky dáta na USB kľúči a ten má poškodený filesystem, takže ho musím dať špecializovanej firme. Hm.
Ešte jedna vec.. Skús si ten riadok s f-ciou mail() trošku ošetriť.
$result = mail("email", $subj, $zprava, $headers,"From: ". $mail_odesilatele);
Daj si po vykonaní vypísať premennú $result. Vracia true (1) pri úspechu, false (0) pri zlyhaní.
Ahoj
EDIT: http://sk.php.net/manual/en/function.mail.php
ahoj :) Nevrací mi nic ani po tomhle. Nic se nevypíše. Zkoušela jsem dokonce jestli nemám nastavenou stejnou barvu pozadí a písma - nikoliv :) Fakt už teda nevim.
$result = Mail("email", $subj, $zprava, $headers);
if ($result==true)
echo "Vse ok";
else "Spatne";
To Janina : Obyčejně pomocí mail() se email dá odeslat, tj. není chyba na straně hostingu/serveru?
Pak si zkus poctivě vypsat všechny proměnné ve funkci mail, jestli neodesíláš něco blbě.
$zprava = StrTr($text,
"\x8A\x8D\x8E\x9A\x9D\x9E",
"\xA9\xAB\xAE\xB9\xBB\xBE");
$zprava = Base64_Encode($text);
zdá se mi to nebo nevidím definici $text? nemá tam být $zprava?
To pawlik : Vyzerá to tak. Missing input variable $text :)
EDIT: Je tu ešte možnosť, že vykonávanie skriptu sa nedostane po f-ciu mail(). Ale to len čisto teoreticky. Musíš si nechať vypísať všetky premenné (samozrejme tak, aby si vedela, ktorá je ktorá) a testovať každý riadok kódu na ne/úspešné vykonanie (ako som ti ukazoval s f-ciou mail() )
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Diakritika neodešle formulář — založil Jarda
Formulář a špatná diakritika — založil Valda
Diakritika — založil DjHard
Diakritika — založil suchla
Diakritika — založil peter
Moderátoři diskuze