jämähdin kiinni merkistökoodaukseen tapauksessa, jossa mulla on lomakesivu, jolta tiedot lähtee php-kieliseen scriptiin. tämä lähettää viestitiedot edelleen määriteltyyn emailosoitteeseen.
muuten toimii ok, mutta ääkköset ei pelitä (tulostaa näin Viesti..: T??ss?? viesti??.)
Alla vähän koodia...ensin lähettävä lomakkeen sivu
<?php echo '<?xml version="1.0" encoding="utf-8"?>'?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="" /> </head> <body> jne...
ja sitten php-sivu
<?php header('Content-type: text/html; charset=utf-8'); ?> <?php if(isset($_POST['email'])) { jne...
missähän meneepi pieleen?
Villi arvaus kertoo, että olet otsikoista huolimatta tallentanut tiedostot muotoon ISO-8859-15. Korjaus onnistunee tallentamalla muotoon UTF-8 without BOM. xml prologia ei ehkä kannata kirjoittaa echolla?
Ei ongelma ole noissa kohdissa vaan siinä sähköpostissa. Sinun pitää lisätä sähköpostiinkin merkistön ilmoittava otsikko, jotta sähköpostiohjelma lukee sen oikein.
OT: Kannattaa vaihtaa XHTML:stä HTML:ään jos aikomuksenakaan ei ole tuottaa XML-yhteensopivaa syötettä (jota palvelin lähettää XML-muodossa).
Metabolix kirjoitti:
Ei ongelma ole noissa kohdissa vaan siinä sähköpostissa. Sinun pitää lisätä sähköpostiinkin merkistön ilmoittava otsikko, jotta sähköpostiohjelma lukee sen oikein.
ei ymmärrys mennyt perille :-)
Laita esille miten olet php:ssä määritellyt sähköpostin headerit.
Onko siellä ...Content-type: text/plain; charset=ISO-8859-1....tai jotain vastaavaa?
makumaku kirjoitti:
Laita esille miten olet php:ssä määritellyt sähköpostin headerit.
Onko siellä ...Content-type: text/plain; charset=ISO-8859-1....tai jotain vastaavaa?
/* Lähetetään saadut tiedot sähköpostilla */ @mail("$emailLahetys", "Palaute : $otsikko"," Palaute: $otsikko Palaute jätetty: $aikaLahetetty Lähettäjän nimi: $nimi Lähettäjän sähköposti: $email Lähetetty viesti: $teksti Vastataanko palautteeseen? : $vastaus Lähettäjän IP-osoite: $lahettajanIP Lähettäjän host: $lahettajanHost Lähettäjän user-agent: $lahettajanSelain ","From: $emailLahetys\r\n"."Reply-To: $email");
Sähköpostin otsikko pitää koodata vielä eri tavalla:
<?php function mail_utf8($to, $subject = '(No 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); }
Poimittu täältä: http://bitprison.net/php_mail_utf-8_subject_and_message
olen vähän pihalla siis miten liitän tuon ylläolevan scriptiin alla?
<?php /******************************************************************************************************/ /* Määritellään seuraavat muuttujat: - Ylläpidon sähköpostiosoite, johon lomakkeella lähetetyt tiedot lähetetään - Kiitossivu, johon käyttäjä siirtyy automaattisesti lähetettyään lomakkeen - Tieto siitä, tallennetaanko lähetetyt palautteet tiedostoon (true, jos haluat, että ne tallennetaan ja false, jos haluat, että niitä ei tallenneta) - Tiedosto, johon lähetetyt palautteet tallennetaan, jos valitsit, että palautteet tallennetaan. /******************************************************************************************************/ // Alkumääritykset $emailLahetys = "joku.mailosoite@hotmail.com"; // mihin osoitteeseen tiedot lähetetään $kiitosSivu = "http://www.jokusivu.php"; // osoitte johon siirrytään lähetyksen jälkeen /* Luetaan tyyppi-parametri, jolloin tiedetään, minkätyyppistä lomaketta ollaan käsittelemässä */ $tyyppi = $_POST['Tyyppi']; /************************************************************/ /* Tästä alkaa palautelomakkeen käsittely */ /************************************************************/ if ($tyyppi == 'PALAUTE') { /* Luetaan lomakkeen lähettämät kentät muuttujiin */ $nimi = $_POST['nimi']; $otsikko = $_POST['otsikko']; $teksti = $_POST['teksti']; $vastaus = $_POST['vastaus']; $email = $_POST['email']; /* Tehdään lomakkeen kentille tarkastukset, ettei ole liian lyhyitä/pitkiä kenttiä. */ if (strlen($nimi) <2) exit ("Et antanut nimeäsi."); if (strlen($nimi) >50) exit ("Nimen pituus on rajoitettu 50 merkkiin."); if (strlen($otsikko) <3) exit ("Et kirjoittanut viestillesi otsikkoa (min. 3 merkkiä)"); if (strlen($otsikko) >50) exit ("Otsikon pituus on rajoitettu 50 merkkiin."); if (strlen($teksti) <10) exit ("Et kirjoittanut palautteeseen tekstiä (min. 10 merkkiä)"); if (strlen($teksti) >5100) exit ("Palaute-tekstin pituus on rajoitettu 5000 merkkiin."); if (strlen($email) >51) exit ("Sähköpostiosoitteen pituus on rajoitettu 50 merkkiin."); if ($vastaus=="vastataan") { // Jos valittiin, että halutaan palautteeseen vastaus, pitää antaa myös sähköpostiosoite if (strlen($email) <5) exit ("Valitsit, että haluat palautteeseesi vastattavan, mutta et antanut sähköpostiosoitettasi tai se on virheellinen!"); if (!ereg("@", $email)) exit ("Valitsit, että haluat palautteeseesi vastattavan, mutta et antanut sähköpostiosoitettasi tai se on virheellinen!"); } if (strlen($vastaus) >30) { exit ("Vastaus-kentän pituus rajoitettu 30 merkkiin."); } /* Jos vastausta ei haluttu */ if ($vastaus != "vastataan") { $vastaus = "EI vastata"; $email = "ei@vastata.net"; } else $vastaus = "Vastataan"; /* Otetaan ylös lähettäjän IP-osoitteet ja kellonaika yms. */ $lahettajanIP = $_SERVER['REMOTE_ADDR']; $lahettajanHost = gethostbyaddr($_SERVER['REMOTE_ADDR']); $lahettajanSelain = $_SERVER['HTTP_USER_AGENT']; $aikaLahetetty = date('d.m.Y H:i:s'); function mail_utf8($to, $subject = '(No 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); } /* Lähetetään saadut tiedot sähköpostilla */ @mail_utf8("$emailLahetys", "Palaute: $otsikko"," Palaute: $otsikko Palaute jätetty: $aikaLahetetty Lähettäjän nimi: $nimi Lähettäjän sähköposti: $email Lähetetty viesti: $teksti Vastataanko palautteeseen? : $vastaus Lähettäjän IP-osoite: $lahettajanIP Lähettäjän host: $lahettajanHost Lähettäjän user-agent: $lahettajanSelain ","From: $emailLahetys\r\n"."Reply-To: $email"); /* Siirtyy kiitossivulle */ header("Location: ".$kiitosSivu); } // end if ($tyyppi == 'PALAUTE') else { /* Jos kyseessä on joku muu lomake kuin tyyppiä PALAUTE. */ exit ("Lomakkeen tietoja ei pystytä käsittelemään. Tarkista lomake"); } ?>
Teuro kirjoitti:
xml prologia ei ehkä kannata kirjoittaa echolla?
Eiköhän se ole siksi echotettu, kun servulla on short open tag päällä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.