Forum » Izdelava spletišč » Odstranitev narekovajev pri posiljanju maila v PHP?
Odstranitev narekovajev pri posiljanju maila v PHP?
poweroff ::
V HTML formo v textarea vpisem tekst, ki se potem poslje po mailu.
OK, ampak ce vpisem tole:
test "krneki"
(se pravi uporabim narekovaje), potem po mailu dobim tole:
test \"krneki\"
Mail posiljam kot "Content-Type: text/html; charset=windows-1250"
Kako to odstraniti?
OK, ampak ce vpisem tole:
test "krneki"
(se pravi uporabim narekovaje), potem po mailu dobim tole:
test \"krneki\"
Mail posiljam kot "Content-Type: text/html; charset=windows-1250"
Kako to odstraniti?
markz ::
Zivjo...
V php fajlu, preden posljes mail moras popravit par znakov...
Ce posiljas mail kot HTML je najboljse, da te znake zamenjas z html entitetami...
se pravi " z " ...
to se najboljse, v enem koraku v phpju naredi takole:
naredis array z zamenjavami (lahko jih je poljubno)
npr. : $trans = array('\\"' => '"', '<' => '<', '>' => '>') in podobno...
potem pa svojo textarea variablo ($mailVsebina) posljes skozi funkcijo strtr()
$mailVsebina = strtr($mailVsebina, $trans);
in to je to...
na ta nacin lahko zamenjas tudi nove vrstice z <BR> in ostalim, kar ti pade na pamet...
markz
V php fajlu, preden posljes mail moras popravit par znakov...
Ce posiljas mail kot HTML je najboljse, da te znake zamenjas z html entitetami...
se pravi " z " ...
to se najboljse, v enem koraku v phpju naredi takole:
naredis array z zamenjavami (lahko jih je poljubno)
npr. : $trans = array('\\"' => '"', '<' => '<', '>' => '>') in podobno...
potem pa svojo textarea variablo ($mailVsebina) posljes skozi funkcijo strtr()
$mailVsebina = strtr($mailVsebina, $trans);
in to je to...
na ta nacin lahko zamenjas tudi nove vrstice z <BR> in ostalim, kar ti pade na pamet...
markz
poweroff ::
Hmm, problem je v temle - dovoljujem da uporabnik vpiše par HTML ukazov.
Torej ne morem kar zamenjati < z & lt... poleg tega se je pojavil se dodaten problem: kaj če uporabnik vpise \, potem po mailu dobim \.
Ostalo bi se nekako resil, tole pa mi ne gre: - da user vpise
<
>
\
Dobim tole:
< br >
\\
Kakšna pomoč?
Torej ne morem kar zamenjati < z & lt... poleg tega se je pojavil se dodaten problem: kaj če uporabnik vpise \, potem po mailu dobim \.
Ostalo bi se nekako resil, tole pa mi ne gre: - da user vpise
<
>
\
Dobim tole:
< br >
\\
Kakšna pomoč?
markz ::
Hja... zanimiv problem...
potem pa pozabi na tisti nacin, ki sem ti ga povedal prej, pa uporabi samo funkcijo stripslashes() ...
$text = stripslashes($text) ---> \" bo " \' bo ' in \\ bo \
markz
potem pa pozabi na tisti nacin, ki sem ti ga povedal prej, pa uporabi samo funkcijo stripslashes() ...
$text = stripslashes($text) ---> \" bo " \' bo ' in \\ bo \
markz
darh ::
Matthai: ce se ces znebit HTML tagov uporabi:
string strip_tags ( string str [, string allowable_tags])
uporabiš pa tole takole:
$string = strip_tags($string, '<a><b><i><u>');
če pa nočeš da ti zbriše tage, ampak ti jih pokaže, pa uporabiš:
string htmlentities ( string string [, int quote_style [, string charset]])
string strip_tags ( string str [, string allowable_tags])
uporabiš pa tole takole:
$string = strip_tags($string, '<a><b><i><u>');
če pa nočeš da ti zbriše tage, ampak ti jih pokaže, pa uporabiš:
string htmlentities ( string string [, int quote_style [, string charset]])
Excuses are useless! Results are priceless!
Zgodovina sprememb…
- spremenil: darh ()
poweroff ::
xbite - to sem že vse naredil in to vem... glej, imam takole:
$MyName = strip_tags($MyName, '');
$MyEmail = strip_tags($MyEmail, '');
$MyEmailBody = str_replace("\n"," < br > \n",$MyEmailBody);
$MyEmailBody = strip_tags($MyEmailBody, ' < b > < i > < u > < br > < p > ');
if (!@mail("$site_email",
"Sporocilo!",
"Vsebina sporočila: $MyEmailBody",
"From: $MyName<$MyEmail>\n"
."Reply-To: $MyEmail\n"
."X-Priority: 2\n"
."Content-Type: text/html; charset=windows-1250")) {
echo "Error";
In evo v čem je problem:
če user v variablo $MyEmailBOdy (v prejšnji formi) napiše " \ ', se to narobe interpretira.
stripslashes ne pomaga!
" in ' znam porihtati, problem je z \, ki postane \\
Problem je tudi tale: kaj če mi user napiše eno formulo:
a + b < 4 - znak < se bo narobe interpretiral. Če pa dam htmlentities, pa izgubim prave ukaze, ko uporabnik da ukaz za bold, itd...
$MyName = strip_tags($MyName, '');
$MyEmail = strip_tags($MyEmail, '');
$MyEmailBody = str_replace("\n"," < br > \n",$MyEmailBody);
$MyEmailBody = strip_tags($MyEmailBody, ' < b > < i > < u > < br > < p > ');
if (!@mail("$site_email",
"Sporocilo!",
"Vsebina sporočila: $MyEmailBody",
"From: $MyName<$MyEmail>\n"
."Reply-To: $MyEmail\n"
."X-Priority: 2\n"
."Content-Type: text/html; charset=windows-1250")) {
echo "Error";
In evo v čem je problem:
če user v variablo $MyEmailBOdy (v prejšnji formi) napiše " \ ', se to narobe interpretira.
stripslashes ne pomaga!
" in ' znam porihtati, problem je z \, ki postane \\
Problem je tudi tale: kaj če mi user napiše eno formulo:
a + b < 4 - znak < se bo narobe interpretiral. Če pa dam htmlentities, pa izgubim prave ukaze, ko uporabnik da ukaz za bold, itd...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Rabim pomoč pri PHP-ju.Oddelek: Šola | 684 (521) | Stari89 |
» | Pravilen vpis/izpis iz podatkovne bazeOddelek: Izdelava spletišč | 748 (635) | schtr4jh |
» | [php] Knjiga gostovOddelek: Izdelava spletišč | 3159 (2362) | darix |
» | [PHP] Kako izvesti neko kodo šele ob klikuOddelek: Izdelava spletišč | 1913 (1399) | krho |
» | Htmlentities()Oddelek: Programiranje | 1500 (1359) | rc-car |