| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Keskustelut - PHP - Merkistöongelmia X-Maileriseditoitu: 10:00 19.1.10 ikaroz 10:00 19.1.10 Tein pienen palaute-koodin tässä, ja törmäsin ongelmaan merkistön kanssa. Olen säätänyt kaiken defaultille utf-8, mutta kun lähetän viestin, Thunderbird osaa lukea sen oikein utf-8, ä on ä ja ö on ö, mutta kun kirjaudun webmailiin (Horde), ä onkin ä ja ö on ö eli perus merkistötuhrausta. Jos vaihdan merkistön iso-8859-1 molemmat tuhraavat ä ja ö -kirjaimet. Osaisiko joku auttaa tässä ongelmassa että saisin tekstin oikein molemmissa ohjelmissa? Pistän koodit alapuolelle: palaute.php <p>Nimesi</p> <input name="nimi" size="26" class="palaute" type="text" /> <br /><br /><p>Puhelinnumerosi</p> <input name="puh" size="26" class="palaute" type="text" /> <br /><br /><p>Sähköpostisi</p> <input name="sahkoposti" size="26" class="palaute" type="text" /> <br /><br /> <p><input type="checkbox" name="palaute" size="26" value="yes" class="palaute"/> Haluan, että minuun otetaan yhteyttä</p> <br /><p>Viesti</p> <textarea name="viesti" cols="25" class="palaute" rows="7">Kirjoita viestisi tähän</textarea><br /> <input value="Lähetä" type="submit" /> </form> palautelahetys.php <?php $to = "sahkoposti@mail.fi"; $topic = "Palauteta " . date("d.m.Y H:i", mktime()); $headers .= "From: {$_POST['sahkoposti']}" . "\r\n"; $headers .= "Reply-to: {$_POST['sahkoposti']}" . "\r\n"; $headers .= "Content-type: text/plain; charset=utf-8" . "\r\n"; $headers .= "X-Mailer: PHP5"; $palaute = !empty($_POST["palaute"]) ? 'Kyllä' : 'Ei'; $body = " Lähettäjä: {$_POST['nimi']} Haluan, että minuun otetaan yhteyttä: ". $palaute ." Sähköpostiosoite: {$_POST['sahkoposti']} Puhelin: {$_POST['puh']} Viesti: {$_POST['viesti']} "; mail($to, $topic, $body, $headers); echo 'Kiitos palautteestasi! Sinut ohjataan takaisin 5 sekunnin kuluttua' ?> <meta HTTP-EQUIV="REFRESH" content="5; url=index.php?id=palaute"> Runoltaja 10:21 19.1.10 Merkistöihin en just nyt muista vastausta kuin pearin mail-mimen käyttö, mutta kerronpa sinulle että tulet saamaan kovasti roskapostia tuolla. timoh 10:43 19.1.10 Lisää noihin headereihin mime-versio ja content-transfer-encoding, jotenkin tyyliin: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Ja validoi varsinkin noita käyttäjän syötteitä mitä istutat headereihin (karsi ainakin \r ja \n ja \0 pois). Tuosta viestin bodyynkin menevästä syötteestä kannattaa ainakin stripata \0 -merkit pois. editoitu: 11:36 19.1.10 ikaroz 11:19 19.1.10 \0 ? ja kumpikaan näistä header ehdoista ei auttanut. Itse asiassa näiden \r\n tagien poisto aiheutti vain että alemmat headerin tagit eivät toimineet. Eikä roskaposti nyt kiinnosta, teen siihen myöhemmin jotakin. timoh 11:42 19.1.10 Tarkoitin tuolla \r ja \n (ja \0) merkkien poistolla, että poista ne tuosta käyttäjältä tulevalta syötteeltä minkä laitat header-osaan: $_POST['sahkoposti']. Eli tietysti sinne headereihin jää ne rivinvaihdot erottamaan tietueita tisistaan, mutta käyttäjän syötteessä niitä ei tule olla. Sitten nuo muut inputit mitä viet viestin bodyyn ($_POST['nimi'], $_POST['sahkoposti'], $_POST['puh'] ja $_POST['viesti']), niin strippaa niistä pois ainakin tuo \0 -merkki (null byte), sitä ei siellä missään nimessä käyttäjän syöttämänä tarvita. editoitu: 12:28 19.1.10 ikaroz 12:05 19.1.10 Jooh ymmärrän ilmeisesti (en ole koodannut PHP kovinkaan paljoa). Eli korvata {$_POST['tagi']} koodiin $sahkoposti = $_POST['sahkoposti'] ja laittaa ne vain $sahkoposti, tuonne headereihin ja bodyyn. Mutta tämä ei minun alkuperäistä ongelmaani ratkaise millään lailla. Mutta yrittänyt jopa ISO-8859-1 merkistöllä. Webmail ei enää valita että olisi väärä merkistö, mutta nyt myös thunderbird tulostaa ä ja ö roskana. ikaroz 12:31 19.1.10 Haa sainpas toimimaan . Piti vain lisätä nämä HTML meta tagit charsettien kanssa tuohon palautelahetys.php kun se ei ollut liitettynä tuohon normi index.php. |
![]() Haku
|