čeština ve funkci mail() – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

čeština ve funkci mail() – PHP – Fórum – Programujte.comčeština ve funkci mail() – PHP – Fórum – Programujte.com

 

vollf820
Stálý člen
13. 2. 2008   #1
-
0
-

Zdravím lidi, jdu si opět pro radu. Funkcí mail posílám určitou zprávu na mejly (ne nejedná se o spam, nebojte).

Mam tam problém s češtinou. V tý zprávě normálně fungují znaky jako ě, í , é, ... ale jakmile je tam š nebo ž , tak tam prostě není, tím myslím jako že zmizí. místo "budeš" tam je "bude" ...

Zkoušel sem všechno možné nastavování kódování, pro jistotu sem dávám celej kód, ale stále nic nefunguje :( Poradíte? Díky ...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html><head>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1250">
<meta name="description" content="online hry">
<title>Zpráva</title>
</head>

<?
"MIME-Version: 1.0\n".
"Content-Type: text/plain; charset=\"windows-1250\"\n".
"Content-Transfer-Encoding: base64";

$zprava="Ahoj,\npojď si s námi zahrát výbornou online hru. Nepotřebuješ nic instalovat ani stahovat. \n\nTuto zprávu ti zaslal: ".$_POST[podpis]."\nmozno odpovědět na: ".$_POST[email];


$predmet="Vyborna on-line hra, zkus to !";

$hlavicka .= "From: TJ".
"MIME-Version: 1.0\n".
"Content-Type: text/plain; charset=\"windows-1250\"\n".
"Content-Transfer-Encoding: base64";

$email=mail("xxxx@seznam.cz,".$_POST[mail1].",".$_POST[mail2].",".$_POST[mail3].",".$_POST[mail4], "$predmet", "$zprava");


Trošku sem to ořezal ale tohle by jako ukázka mělo stačit. Díky ...

Nahlásit jako SPAM
IP: 91.195.106.–
toka0
Stálý člen
13. 2. 2008   #2
-
0
-

Pouzivam tuto funkci, a nikdy jsem problem nemel:



function sendMail($from, $to, $subject, $body) {
// Create e-mail MIME headers
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-2\n";
$headers .= "X-Priority: 3\n";
$headers .= "X-MSMail-Priority: Normal\n";
$headers .= "X-Mailer: php\n";
$headers .= "Return-Path: <" . $from . ">\n";
$headers .= "From: \"" . $from . "\" <" . $from . ">\n";
$headers .= "To: \"" . $to . "\" <" . $to . ">\n";
$headers .= "Subject: $subject\n";

$emailSource = $headers . "\n" . nl2br($body);

if(@mail("\"" . $to . "\" <" . $to . ">", $subject, $body, $headers))
return true;
else
return false;
}


Je ale pravda, ze to posilam jako text/html a ty jako text/plain.

Nahlásit jako SPAM
IP: 86.61.165.–
Tomáš Kavalek
Prog.0
Věrný člen
13. 2. 2008   #3
-
0
-

To vollf82 :

Chyba môže byť spôsobená tým, že windows-1250 nie je štandardom v e-mailovej komunikácii, takže nie je povinnosťou e-mailových klientov vedieť pracovať s týmto kódovaním. Väčšinou však vedia. Ak ti to blbne v programe majkrosoft autluk, tak je problém niekde inde.

Ak miznú iba spomínané znaky, môže to znamenať, že sa e-mailový program pokúša zobraziť text uložený v kódovaní windows-1250 kódovaním latin2. Pozri: Podobnost latin2 s cp1250 http://cs.wikipedia.org/wiki/ISO_8859-2#Podobnost_s_Windows-1250.
Pri opačnej zámene by sa "š" malo zobraziť ako "ą", no je možné že emailovný program takéto znaky preskočí a nezobrazí, takže aj to sa mohlo stať. V takom prípade by pomohlo zmeniť len "windows-1250" za "iso-8859-2". Alebo si si istý, že ten zdroják máš v cp1250 ?

To toka :

text/plain je na čistý text, text/html pre html emaily. Nemalo by sa to miešať, no emailové programy to zvládnu.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
vollf820
Stálý člen
13. 2. 2008   #4
-
0
-

No všude sem tam nacpal Windows-1250 tak by to v tom mělo být. Jinak myslím že to iso sem zkoušel taky, ale to nešlo taky. I když ještě to zkusím.

jinak tu chybu mi to zobrazuje na emailu seznamu, když si to prohlížím přes mozzilu (netaham ten mejl outlookem). Možná by mohl bejt problém na straně seznamu.cz?? I když to asi ne ...

Nahlásit jako SPAM
IP: 91.195.106.–
vollf820
Stálý člen
13. 2. 2008   #5
-
0
-

Tak sem všechno windows-1250 přepsal na iso-8859-2 a dělá to taky. Místo "Nebudeš" je tam "Nebude" :(

Nahlásit jako SPAM
IP: 91.195.106.–
Prog.0
Věrný člen
13. 2. 2008   #6
-
0
-

Myslím že centrum.cz by si mal vedieť poradiťaj s w..-1250

Keď tak teraz na to pozerám, tak skús vyhodiť z tvojho kódu tú poslednú hlavičku (Content-Transfer-Encoding: base64). Myslím že tam v tvojom prípade nemá čo robiť.

A kód od toka si skúsil ? Ak nepôjde taký ako ho uviedol, tak zmeň len kódovanie na windows-1250.

Momentálne si neviem predstaviť, kde by mohol byť ešte problém. Aby sme nemuseli hádať ...aké kódovanie to používaš? Ak to nevieš zistiť, tak daj do prílohy ten zdroják (pripoj do prílohy, nemyslím teraz vložiť do textu). Nemusí byť celý, stačí nejaký segment s problémovými znakmi.

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
Prog.0
Věrný člen
13. 2. 2008   #7
-
0
-

To vollf82 :
Btw, teraz som sa tak lepšie na to pozrel...

a) ak rozposielaš mail viacerým adresátom, tak je neslušné uviesť všetkých príjemcov dokopy. Je to dokonca porušenie nejakého zakona, že vraj o ochrane osobných údajov... Radšej ich daj do cc, alebo ešte lepšie, odošli mail pre každého adresáta zvlášť.

b) Strkať samú premmennú do uvodzoviek nemá význam - ..."$predmet", "$zprava"... - uvodzovky preč
index asociatívneho poľa by uvodzovky mal mať - $_POST[mail4] => $_POST["mail4"] (v tomto prípade ešte správnejšie apostrofy: $_POST['mail4'])

c) A hlavne nepoužívaj $_POST a iné superglobaly priamo vo funkciách... (googli: php injection )

d) Radšej použi <?php miesto <? (3 znaky navyše až tak nezdržia, no zabezpečia vyššiu kompatibilitu ;-)

...

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
vollf820
Stálý člen
13. 2. 2008   #8
-
0
-

Tak jsem to překopal na tohle:

<?  

$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-2\n";
$headers .= "X-Priority: 3\n";
$headers .= "X-MSMail-Priority: Normal\n";
$headers .= "X-Mailer: php\n";
$headers .= "Subject: $predmet\n";


$zprava="Ahoj,\npojď si s námi zahrát výbornou online hru. Nepotřebuješ nic instalovat ani stahovat. Funguje to pouze v prohlízeči. Poté, budes li chtít, tam klikni na Registraci a zaregistruj se.\n\nTuto zprávu ti zaslal: ".$_POST[podpis]."\nmozno odpovědět na: ".$_POST[email];


$predmet="Vyborna on-line hra zkus to !";


$email=mail("xxxx@seznam.cz,".$_POST[mail1].",".$_POST[mail2].",".$_POST[mail3].",".$_POST[mail4], $predmet, $zprava, $headers);

if($email)
{
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; iso-8859-2">
<meta name="description" content="online hry, hry zdarma, hry">
<title>Zpráva</title>
</head>

<body>
<script>
window.location.href='http://www.xxxx.wz.cz/pokus/index.php?x=5'
</script>
</body>
</html>
<?
}

?>


A stejně to nejde :( ....... tohle je komplet celej kód toho souboru mail.php kterej mi odesílá ty mejly.

Nahlásit jako SPAM
IP: 91.195.106.–
vollf820
Stálý člen
13. 2. 2008   #9
-
0
-

Dík za rady, já v tom teda ještě nejsem až tak zběhlej :) ....... a co mam teda používat místo toho $_POST

O těch uvozovkách - už sem si toho všim taky :)

Nahlásit jako SPAM
IP: 91.195.106.–
vollf820
Stálý člen
13. 2. 2008   #10
-
0
-

Hele ještě k tomu PHP inject (nebo jak se to nazývá) :)

Ja mam ve skriptech třeba že odkaz je index.php?x=1

a ve skriptu:

if(x==1)
{ include("kontakty.html") ; }

fungovalo by to hackovani i na tohle?

Nahlásit jako SPAM
IP: 91.195.106.–
toka0
Stálý člen
13. 2. 2008   #11
-
0
-

Vetsina serveru ma prave toto zakazano, coz se "bezne" pouzivalo jeste tak pred tremi lety. Takze ted se ti vetsinou stane to, ze x je nedefinovano, tudiz 0, a nebude se chovat dle ocekavani. Mel bys tudiz pouzit deklaraci:



if($_GET["x"] == 1) {
include("kontakty.html") ;
}


Muze se ti vsak stat, ze ti to treba na localhostu pujde a na webu ne, pak mas spatne nastaveny server, resp. PHP.

Nahlásit jako SPAM
IP: 86.61.165.–
Tomáš Kavalek
Prog.0
Věrný člen
13. 2. 2008   #12
-
0
-

...myslel som to tak, že ten súbor daj do prílohy a nevkladaj iba jeho text. Inak ti kódovanie súboru nezistím.
OK, ja prikladám 3 súbory na jednoduché odoslanie e-mailu, každý v inom kódovaní. Obsahujú nasledujúci kód:

<?php 


$from = 'odosielatel@centrum.cz';
$to = '...@...';
$subject = 'Pokus';
$body = 'Pokus: ľščťžýáíé - ĽŠČŤŽÝÁÍÉ';

$headers = Array();

$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-type: text/plain; charset=<<pouzite-kodovanie-daneho-suboru>>';
$headers[] = 'From: $from';


echo mail( $to, $subject, $body, implode("\r\n",$headers))
? 'MAIL SENT.'
: 'ERROR';

?>
...neskúšal som to pustiť, no malo byť o.k. ;-)

jou, teraz som sa dočítal toto:

Multiple extra headers should be separated with a CRLF (\r\n). http://www.php.net/manual/function.mail.php

Ale s tým to súvisieť nebude. Ja len že v špecifikácii sa spomína CRLF (\r\n), namiesto LF (\n) tak prečo nevyhovieť.

K tomu php injection sa už zľahka vyjadril toka , viac si radšej nagoogli, je to offtopic a písalo sa o tom už toho až príliš veľa. Len dodám že jeho kód bude bežať aj na localhoste aj na inom serveri. Naopak, tvoj kód pobeží len tam, kde sú povolené niektoré "menej bezpečné" vlastnosti, ako napríklad automatické registrovanie superglobálnych etc.. Konkrétne riadky však vyzerajú bezpečne :-)

Nahlásit jako SPAM
IP: 213.160.186.–
Prog.
vollf820
Stálý člen
13. 2. 2008   #13
-
0
-

díky moc za pomoc .... ted musím z práce domů a pak jedu do neděle pryč, tak to vyzkouším v pondělí ...

jste zlatý lidičky že ztrácíte čas se začátečníkama jako jsem já :)

Nahlásit jako SPAM
IP: 91.195.106.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 43 hostů

Podobná vlákna

S.w.i.n.e - čeština — založil ondy13

čestina? — založil Michal

Čeština v C++ — založil Pavel Szabo

Cestina — založil matouch

Čeština v C++ — založil vdolek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý