Gå til innhold

Problemer med tegnsett, hvilket skal jeg bruke?


Anbefalte innlegg

Hvis jeg har et HTML-skjema som sender informasjonen til et PHP-script som skal sende en mail med informasjonen fra skjemaet, hvilket tegnsett skal jeg bruke for å kunne få norske tegn? UTF-8? Hvis jeg prøver å bruke UTF-8 får jeg en "headers already sent"-feil, er det noen som vet hvorfor?

 

Hilsen Petter

Lenke til kommentar
Videoannonse
Annonse

Beklager at jeg ikke la ved kode.

 

Her er den relevante HTML-biten. Dette er i UTF-8.

 

<h2>Fyll ut skjemaet for å ta kontakt</h2>
   	<p>Dette skjemaet kan du fylle ut for å ta kontakt med oss. Feltene merket med "*" er obligatoriske.</p>
   	<form action="../scripts/kontakt_action.php" method="post">
     
     <p>Skriv inn din e-post-addresse: *</p>
     <p><input type="text" name="mail" value="E-post" onfocus="if(this.value=='E-post'){this.value=''}" onblur="if(this.value==''){this.value='E-post'}" /></p>
     
     <p>Ditt navn: *</p>
     <p><input type="text" name="name" value="Navn" onfocus="if(this.value=='Navn'){this.value=''}" onblur="if(this.value==''){this.value='Navn'}" /></p>
     
     <p>Beskjeden din: *</p>
     <p><textarea cols="20" rows="10" name="message" onfocus="if(this.value=='Din beskjed'){this.value=''}" onblur="if(this.value==''){this.value='Din beskjed'}">Din beskjed</textarea></p>
     
     <p>Skriv inn ditt telefonnummer hvis du vil vi skal ringe deg opp</p>
     <p><input type="text" name="tlf" value="Telefonnummer" onfocus="if(this.value=='Telefonnummer'){this.value=''}" onblur="if(this.value==''){this.value='Telefonnummer'}" /></p>
     
     <p><input type="submit" name="submit" value="Send" /></p>
   	</form>

 

Her er den relevante PHP-en. Dette er enkodet med ANSI. Hvis jeg forsøker å enkode det med UTF-8, får jeg den tidligere nevnte "Headers already sent"-feilen, enten hvis jeg har en sjekk som feiler, eller hvis alt går bra, og den skal videresende til main igjen.

 

 

<?php
include('functions.php')


$mail = $_POST['mail'];
$name = $_POST['name'];
$message = $_POST['message'];
if (!isset($_POST['tlf']) or $_POST['tlf'] == "Telefonnummer")
{	
 $tlf = NULL;
}
else
{	
 if(!isOkay($tlf))
 {
 	header ('Location: ../index.php?page=error_kontakt');
 	exit;
 }
 else
 {
 $tlf = $_POST['tlf'];
 }
}



//Her kommer en mengde sjekker for å se at brukeren har fylt ut alle feltene du skal, og at han/hun ikke spammer

if (!isset ($_POST['submit']))
{
 header ('Location: ../index.php?page=kontakt');
 exit;
}

if (!isset($_POST['mail']) or !isset($_POST['name']) or !isset($_POST['message']))
{
 header ('Location: ../index.php?page=error_kontakt');
 exit;
}

if ($mail == 'E-post' or $name == 'Navn' or $message == 'Din beskjed')
{
 header ('Location: ../index.php?page=error_kontakt');
 exit;
}

if (!isOkay($name) or !isOkay($message) or !isValidEmail($mail))
{
 header ('Location: ../index.php?page=error_kontakt');
 exit;
}
//Her slutter den siste sjekken

if(mail ('[email protected]', "Forespørsel fra $name", "$tlf \n $name har sendt en mail. \n Her følger beskjeden: \n $message", "From: $mail"))
{
 header ('Location: ../index.php?page=main');
 exit;
}
else
{
 header ('Location: ../index.php?page=error_kontakt');
 exit;
}

?>

Lenke til kommentar

Kan godt hende jeg ordlegger meg galt. Jeg skriver i Notepad++, og velger format->encode in utf-8, og det er da header-feilene oppstår.

 

Jeg la inn header('Content-Type: text/html; charset=utf-8'); -linja i toppen av dokumentet, og det ga meg bare en "headers already sent"-feil til, og internasjonale tegn i mailene skriptet sender blir fremdeles feil tolket når mailen kommer frem.

Endret av G2Petter
Lenke til kommentar

Hvis du skal ha php script i utf-8 må du lagre det som utf-8 uten "byte order mark" eller BOM header. Denne vil ligge som de tre første bytes i dokumentet, og være usynlig i editoren. Disse usynlige bytene vil ligge før første <?php tag og trigge sending av headers.

 

Hvordan du lagrer som utf8 uten bom i notepad++ aner jeg ikke. prøv google.

Lenke til kommentar

OK, nå har jeg sjekket at alle sidene er lagret med riktig charset, og deklarert det i toppen, og det blir fremdeles feil. Jeg har testet hvordan variablene som kommer fra skjemaet oppfører seg ved å legge inn følgende rett over koden som sender mailen:

 

echo "<p>$mail</p><p>$message</p><p>$name</p>";

 

Variablene kom da ut med alle tegn presentert korrekt, mens i mailen er fremdeles både de norske tegnene som kommer fra skjemaet og de som er hardkodet inn i mailen ødelagte.

Lenke til kommentar

<?php

$body="<em>HTML</em> formatted <strong>Message</strong";

 

$headers = "From: [email protected] \r\n";

$headers.= "Content-Type: text/html; charset=ISO-8859-1 ";

$headers .= "MIME-Version: 1.0 ";

/*notice there aren't any \r\n after the second two header additions. This is what made this version work correctly*/

mail("[email protected]", "An HTML Message", $body, $headers);

?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...