heippa taas,
kun kirjoitan www-sivulla olevalle lomakkeelle teksti vaikkapa seuraavasti:
Hei!(tässä enter)
Ja sitten jatkan itse tekstiä...
niin emailissa vastaavalla kohdalla on:
Hei!\r\nJa sitten jatkan itse tekstiä...
elikäs miten saankaan selaimen näyttämään lomakkeelle tehty rivinvaihto?
Chiman kirjoitti:
oon varmaankin ihan pönttö, mutta kun käytän nl2br-funkkaria, niin testissä saan rivinvaihdon selaimen näytössä meneen ihan ok, mutta kun laitan sen oikeeseen ohjelmaan ja katson lopputulosta emailistä, niin siellä oleilee edelleen ihan komeesti
Hei!\r\n
Kysyit miten saat selaimen näyttämään rivinvaihdot, siihen nl2br on toimiva keino. Jos emailiin tulostuu eri tavalla, käytät ehkä addslashes-funktiota jossain vaiheessa. Katso ongelmallisen sähköpostin lähdekoodia ja pastea siitä oleelliset osat tänne.
<?php // Avataan tietokantayhteydet // Emailosoitteen tarkastaminen function validate_email($email) { return filter_var($email, FILTER_VALIDATE_EMAIL); } // Lähettää sähköpostiin viestin function mail_utf8($to, $subject, $message, $header) { $header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n"; mail($to, "=?UTF-8?B?".base64_encode($subject).'?=', $message, $header_ . $header); } // Tarkastetaan, että kaikkiin vaadittaviin kenttiin on annettu syöttötieto $tiedot_ok = true; if ((!$_POST['nimi']) || (!$_POST['otsikko']) || (!$_POST['teksti']) || (!$_POST['emaili']) || (!$_POST['kenelle'])) { require "..."; $tiedot_ok = false; } // Varmistetaan lomakkeelta tuleva syöte $nimi = mysql_real_escape_string(stripslashes($_POST['nimi'])); $otsikko = strtoupper(mysql_real_escape_string(stripslashes($_POST['otsikko']))); $teksti = mysql_real_escape_string(stripslashes($_POST['teksti'])); $kenelle = mysql_real_escape_string(stripslashes($_POST['kenelle'])); $vastaus = mysql_real_escape_string(stripslashes($_POST['vastaus'])); $emaili = mysql_real_escape_string(stripslashes($_POST['emaili'])); $phone = mysql_real_escape_string(stripslashes($_POST['phone'])); // Jos email-osoite on annettu, sen muoto tarkastetaan $emailOK = true; if ($_POST['emaili']) { $emailOK = validate_email($emaili); } // Tänne jos puuttuu vaadittavia syöttötietoja tai annettu email-osoite ei kelpaa if (!$tiedot_ok or !$emailOK) {require "...";} // Lähetetään palaute jos lomaketiedot ja email-osoite molemmat ovat kunnossa $teksti = nl2br($teksti); if ($tiedot_ok and $emailOK) { $to = "..."; $subject = "Palautetta"; $message = "Otsikko.....: ".$otsikko."\n\rNimi........: ".$nimi."\nVastataanko.: ".$vastaus."\nEmail.......: ".$emaili."\nPuhelin.....: ".$phone."\n\r$teksti"; // Mailin lähetys mail_utf8($to, $subject, $message, $header); require "..."; } ?>
volume kirjoitti:
$teksti = mysql_real_escape_string(stripslashes($_POST['teksti']));
Tuossahan se syy taitaa olla. Käsittelet mailitse lähetettävän tekstin tietokantaan lisäystä varten, jolloin sen muoto muuttuu vääräksi.
Chiman kirjoitti:
volume kirjoitti:
$teksti = mysql_real_escape_string(stripslashes($_POST['teksti']));Tuossahan se syy taitaa olla. Käsittelet mailitse lähetettävän tekstin tietokantaan lisäystä varten, jolloin sen muoto muuttuu vääräksi.
onko siis niin, että mailitse lähetettäviä kenttiä ei "tarvitse" tarkastaa lainkaan ko. funkkareilla?
volume kirjoitti:
onko siis niin, että mailitse lähetettäviä kenttiä ei "tarvitse" tarkastaa lainkaan ko. funkkareilla?
Mysql_real_escape_string on lähetettävän tekstin kanssa aivan turha, mutta stripslashes:ia tarvitset, jos Magic Quotes on päällä. Käyttäjältä tulevaa dataa ei kylläkään kannata laittaa suoraan headereihin, mutta et näytä niin tekevänkään.
nyt ok. mysql_real_escape_string-funktion poisto taulukkomuuttujasta ($_POST['teksti']) auttoi. ei näytä tarvittavan enää nl2br-funkkaria. Kiitos avusta!
Aihe on jo aika vanha, joten et voi enää vastata siihen.