Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: merkistökoodaus

Sivun loppuun

volume [20.01.2011 22:18:25]

#

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?

Teuro [20.01.2011 23:07:38]

#

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?

Metabolix [20.01.2011 23:42:09]

#

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.

eq [20.01.2011 23:48:05]

#

OT: Kannattaa vaihtaa XHTML:stä HTML:ään jos aikomuksenakaan ei ole tuottaa XML-yhteensopivaa syötettä (jota palvelin lähettää XML-muodossa).

volume [21.01.2011 00:22:19]

#

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 :-)

makumaku [21.01.2011 00:29:06]

#

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?

volume [21.01.2011 07:53:41]

#

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");

Chiman [21.01.2011 09:56:04]

#

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

volume [21.01.2011 10:43:23]

#

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");
}

?>

The Alchemist [22.01.2011 13:41:48]

#

Teuro kirjoitti:

xml prologia ei ehkä kannata kirjoittaa echolla?

Eiköhän se ole siksi echotettu, kun servulla on short open tag päällä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta