webForumDet fria alternativet

Hur få en php-mailer att skriva svenska tecken rätt?

PHP

4 svar · 1 993 visningar · startad av Danne V

Medlem sedan aug. 20068 090 inlägg
Frågan#1

Använder en ganska enkel mailer (se nedan).
De svenska tecken som finns i skriptet kommer fram OK. Men de tecken som användaren skrivit in i formuläret blir skit. Å blir Ã¥, ä blir À och ö blir ö.
Både formuläret och skriptet är sparade i utf-8.

Men det verkar antingen som att det skiter sig mellan formuläret och skriptet, och då är det väl någon inställning som ska göras på servern?

Eller så är det väl skriptet som behöver tala om att själva meddelandet ska skickas som content-type:text/plain och charset: utf-8, samt content-transfer-encoding 8bit?

<?php
$name		= $_POST["name"];
$phone		= $_POST["phone"];
$company	= $_POST["company"];

$message	= $_POST["message"];
$from		= $_POST["from"];
$verif_box	= $_POST["verif_box"];

$msg_body =  "Hej\n"
			."Ett nytt mail har kommit från hemsidan!\n\n"
			."Namn....: " . $name . "\n"
			."E-post..: " . $from . "\n"
			."Telefon.: " . $phone . "\n"
			."Företag.: " . $company . "\n\n"
			."Meddelande:\n"
			.stripslashes($message);

$from = stripslashes($from); 

// check to see if verificaton code was correct
if(md5($verif_box).'a4xn' == $_COOKIE['blabla']){
	// if verification code was correct send the message and show this page
	mail("mottagare@mottagare.se", 'Här kommer mail!', $_SERVER['REMOTE_ADDR']."\n\n".$msg_body, "From: $from");
	// delete the cookie so it cannot sent again by refreshing this page
	setcookie('blabla','');
} else {
	// if verification code was incorrect then return to contact page and show error
	header("Location:".$_SERVER['HTTP_REFERER']."?subject=$subject&from=$from&message=$message&wrong_code=true");
	exit;
}
?>
Medlem sedan aug. 20039 340 inlägg
#2

Du måste ange vilket charset du använder, mao UTF-8.
Den länkade kommentaren och den under bör lösa ditt problem.
http://www.php.net/manual/en/function.mail.php#92976

Alternativt kör utf8_decode på strängarna för att konvertera den till ISO-8859 innan du skickar den.
http://php.net/manual/en/function.utf8-decode.php

Edit: För övrigt ser jag att du använder stripslashes. Det vore bättre att stänga av magic quotes och, ta bort stripslashes och istället säkra dina DB-data själv med mysql_real_escape_string. Detta eftersom magic quotes är på väg att försvinna från PHP, och då kommer alla som förlitar sig på det att riskera att utsätta sig för SQL-injections.

Medlem sedan aug. 20068 090 inlägg
#3

nitro2k01 skrev:

Du måste ange vilket charset du använder, mao UTF-8.
Den länkade kommentaren och den under bör lösa ditt problem.
http://www.php.net/manual/en/function.mail.php#92976

Alternativt kör utf8_decode på strängarna för att konvertera den till ISO-8859 innan du skickar den.
http://php.net/manual/en/function.utf8-decode.php

Edit: För övrigt ser jag att du använder stripslashes. Det vore bättre att stänga av magic quotes och, ta bort stripslashes och istället säkra dina DB-data själv med mysql_real_escape_string. Detta eftersom magic quotes är på väg att försvinna från PHP, och då kommer alla som förlitar sig på det att riskera att utsätta sig för SQL-injections.

Jag kan nada om php (tyvärr), men försökte att ange bl.a. charset på olika sätt utan att det löste problemet. Jag vet helt enkelt inte var eller hur sådan kod ska läggas in.

Medlem sedan aug. 20039 340 inlägg
#4

Pröva detta:

<?php
$name		= $_POST["name"];
$phone		= $_POST["phone"];
$company	= $_POST["company"];

$message	= $_POST["message"];
$from		= $_POST["from"];
$verif_box	= $_POST["verif_box"];

$msg_body =  "Hej\n"
			."Ett nytt mail har kommit från hemsidan!\n\n"
			."Namn....: " . $name . "\n"
			."E-post..: " . $from . "\n"
			."Telefon.: " . $phone . "\n"
			."Företag.: " . $company . "\n\n"
			."Meddelande:\n"
			.stripslashes($message);

$from = stripslashes($from); 

// check to see if verificaton code was correct
if(md5($verif_box).'a4xn' == $_COOKIE['blabla']){
	// if verification code was correct send the message and show this page
	$msg_body_iso = utf8_decode($msg_body);
	$msg_subject_iso = utf8_decode('Här kommer mail!');
	mail("mottagare@mottagare.se", $msg_subject_iso, $_SERVER['REMOTE_ADDR']."\n\n".$msg_body_iso, "From: $from");
	// delete the cookie so it cannot sent again by refreshing this page
	setcookie('blabla','');
} else {
	// if verification code was incorrect then return to contact page and show error
	header("Location:".$_SERVER['HTTP_REFERER']."?subject=$subject&from=$from&message=$message&wrong_code=true");
	exit;
}
?>
Medlem sedan aug. 20068 090 inlägg
#5

nitro2k01 skrev:

Pröva detta:

Funkar kanon! Tusen tack f hjälpen!!!! (y) (y) (y)

273 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
135 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)