Невозможно отобразить французские акценты в почте php

У меня есть следующий php-скрипт, который отправляет электронное письмо на основе возвращаемых параметров:

<?
header('Content-Type: application/json; charset=utf-8');
$headers  = "From: Source\r\n";
    $headers .= "Content-type: text/html;charset=utf-8\r\n";
    $to = $data["t_email"];
    $subject = "Hello";
    $message = (gather_post("locale") == "fr_CA")?"message français ééààèè": "english message";
    mail($to, $subject, $message, $headers);
?>

Я вынул части, которые не относятся к делу. Сообщение будет отправлено нормально, но акценты не будут отображаться правильно. Все было установлено как кодировка utf-8, я не понимаю, почему это не работает.


person Prusprus    schedule 02.11.2011    source источник


Ответы (3)


Возможно, вам придется кодировать html с помощью utf8_encode(). Например:

$message = utf8_encode("message français ééààèè");

Мне пришлось сделать это, чтобы динамически импортировать документы французского Word, и это прекрасно работает. Дайте мне знать, если это решит вашу проблему.

ОБНОВЛЕНИЕ (пример рабочего кода)

<?php
$to      = '[email protected]';
$subject = 'subject';
$message = utf8_encode('message français ééààèè');
$headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: [email protected]' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

if(mail($to, $subject, $message, $headers)){
echo 'success!';
}
?>
person bozdoz    schedule 02.11.2011
comment
Привет, я пытался добавить utf8_encode, но он все еще не дает мне акценты. Интересно, моя проблема где-то еще в моем документе. Должен ли я убедиться, что моя кодировка верна где-либо еще? - person Prusprus; 02.11.2011
comment
Насколько я знаю, с текстом utf8_encode — это все, что вам нужно. Я считаю, что есть другая функция, которую вам нужно будет запустить, если вы извлекаете данные из MySQL. Однако я никогда не пробовал отправлять французские символы по электронной почте. - person bozdoz; 02.11.2011
comment
о, хорошо, я не извлекаю данные из своей базы данных. Однако я извлекаю несколько точек данных из переменной $_GET. Однако эти точки данных не имеют никаких акцентов, интересно, должны ли они все еще быть закодированы в utf-8? - person Prusprus; 02.11.2011
comment
Хм. Я только что проверил это, и у меня сработало utf8_encode. Возможно, это зависит от того, какой почтовый сервис вы используете. Я обновлю свой код, который сработал. - person bozdoz; 03.11.2011
comment
@bozdoz Может ли кто-нибудь обновить приведенный выше пример для java, у меня такая же проблема с java - person Java Learner; 02.04.2014

Чтобы решить вашу проблему, вам нужно добавить следующую строку в функцию отправки электронной почты:

$headers .= 'Content-type: text/plain; charset=UTF-8' . "\r\n";

Вот интеграция этой линии с функцией отправки по электронной почте:

function send_email($to,$subject,$message,$fromemail) {

    $headers = "From: $fromemail" . "\r\n";
    $headers .= "Return-Path: $fromemail" . "\r\n";
    $headers .= "Errors-To: $fromemail" . "\r\n";
    $headers .= 'Content-type: text/plain; charset=UTF-8' . "\r\n";
    @mail($to,$subject,$message,$fromemail);

}
person J Rem    schedule 22.04.2014

Смотрите здесь хорошие комментарии, которые я нашел. Только это работает для меня. https://ncona.com/2011/06/using-utf-8-characters-on-an-e-mail-subject/

Подробности:

to = '[email protected]';
$subject = 'Subject with non ASCII ó¿¡á';
$message = 'Message with non ASCII ó¿¡á';
$headers = 'From: [email protected]'."\r\n"
.'Content-Type: text/plain; charset=utf-8'."\r\n";
mail($to, '=?utf-8?B?'.base64_encode($subject).'?=', $message, $headers);
person Intacto    schedule 10.03.2017