Brak polskich znaków w phpmailer

0

Wiem, że temat był wałkowany milion razy, ale przerobiłem wszystkie przykłady i nic nie pomogło.Chce sobie zrobić formularz kontaktowy na stronie. Strona jest kodowana w UTF-8. Do wysyłania maili używam PHPMailer. Skrypt wysyłający e-mail wygląda tak:

<?php
   require 'phpmailer/PHPMailerAutoload.php';
   
   $result = false;
   
   if (isset($_POST['flag']) && ($_POST['flag'] == "Sending"))
   {
   	while (true)
   	{
   		$fullname;
   		$email;
   		$subject;
   		$body;
   		
   		if (!isset($_POST['fullname'])) break;
   		$fullname = strip_tags(trim($_POST['fullname']));
   		if (strlen($fullname) < 3 || strlen($fullname) > 30) break;
   		
   		if (!isset($_POST['email'])) break;
   		$email = strip_tags(trim($_POST['email']));
   		if (strlen($email) < 3 || strlen($email) > 30) break;
   		
   		if (!isset($_POST['subject'])) break;
   		$subject = strip_tags(trim($_POST['subject']));
   		if (strlen($subject) < 5 || strlen($subject) > 40) break;
   		
   		if (!isset($_POST['message'])) break;
   		$body = htmlentities(trim($_POST['message']), ENT_NOQUOTES);
   		if (strlen($body) < 20) break;
   		
   		$mail = new PHPMailer;
   		$mail->PluginDir = "phpmailer/"; 
   		
   		$mail->isSMTP();
   		$mail->Host = "smtp.gmail.com";
   		$mail->SMTPAuth = true;
   		$mail->Username = "*****";
   		$mail->Password = "******";
   		$mail->SMTPSecure = 'ssl';
   		$mail->Port = 465;
   		$mail->WordWrap = 50;    
   		
   		$mail->From = $email;
   		$mail->FromName = $fullname;
   		$mail->addAddress('**********'); 
   		$mail->addReplyTo($email, $fullname);
   		$mail->isHtml(true);
   		$mail->CharSet = "UTF-8";
   		$mail->Encoding = "base64";
   		
   		$mail->Subject = $subject;
   		$mail->Body = $body;
   		
   		$result = $mail->send();
   		break;
   	}
   }
   
   header("Location: index.php?sendResult=" . (($result == true) ? "succes" : "error") . "#contact");
?> 

Ale zamiast polskich znaków dostaje krzaczki :( Co zrobiłem źle ?

0

a jak wysyłasz treści "z palca", a nie z $_POST to też nie ma pl znaków?

0

@dzek69 wtedy jest wszystko ok. Czym to może być spowodowane?

0

w takim razie strona nie ma nagłówka meta charset utf-8 i nie wysyła w poprawnym kodowaniu

2

Strona index.php w której jest zawarty formularz posiada nagłówek: <meta charset="UTF-8"> w sekcji head. Próbowałem również dodać ten nagłówek do skryptu sendMail.php lesz rezultat ten sam - nadal krzaczki :(

// EDIT:
Znalazłem przyczynę błędu. Mianowicie coś nie tak było w tej linijce:
$body = htmlentities(trim($_POST['message']), ENT_NOQUOTES);
kiedy dam po prostu:
$body = $_POST['message']

Nie siedze w PHP, ale czytałem kilka artykułów na temat bezpieczeństwo i w każdym była opisana ta prosta metoda... szkoda że nigdzie nie dodali że nie wspiera ona znaków narodowych.

// EDIT 2:
Wystarczyło dodać jako trzeci parametr 'utf-8':
$body = htmlentities(trim($_POST['message']), ENT_NOQUOTES, 'utf-8');

Pół dnia na to straciłem :( och. Czasami człowiek szuka tam gdzie nie trzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1