Китайские иероглифы в электронной почте, отправленной через PHP, не отображаются

Я отправляю почту через PHP с китайскими иероглифами с моего тестового сервера, и он отлично ее отправляет. Кодировка — UTF-8. Когда я загружаю тот же файл PHP на другой сервер и пытаюсь отправить оттуда электронное письмо, он будет выглядеть на 90% нормально в одном почтовом клиенте (на самом деле веб-почта, GMail), но в другом почтовом клиенте (Apple Mail) это вся тарабарщина - даже когда пытаюсь изменить кодировку в почтовом клиенте.

Я застрял здесь, потому что на одном сервере все работает нормально, а на другом нет. Я не уверен, с чего начать искать решения. Что еще более озадачивает, так это то, что на рабочем сервере электронная почта выглядит нормально (странный случай, когда некоторые символы не отображаются), но в других почтовых приложениях она выглядит как мусор.

Любая идея, где я могу начать искать решение этой проблемы?

PHP

$books = json_decode ($_POST['books']);

$body = '
<body bgcolor="#999999"><center>
<table width="700" border="0" cellspacing="2" cellpadding="10" bgcolor="#FFFFFF">
<tr>
    <td>
    你好 ' . $_POST['name'] . ',<br/><br/>以下是你从学习网站,给孩子讲故事课程,所要求的书籍名单<br/><br/><hr noshade="noshade" />
    </td>
</tr>
<tr>
<td>';

$iLen = count($books);
for ($i = 0; $i < $iLen; $i = $i + 1) {
    $book = $books[$i];

    $body .= '<b>' . $book->title . '</b><br/>' . $book->author . '<br/><br/>';
    $body .= '简介: ' . $book->synopsis . '<br/>';
    $body .= '年龄层: ' . $book->age . '<br/>';
    $body .= '场景: ' . $book->setting . '<br/>';
    $body .= '目的: ' . $book->purpose . '<br/>';
    $body .= '索书号: ' . $book->call . '<br/><br/>';
    $body .= '出版商: ' . $book->publisher . '<br/><br/><hr noshade="noshade" />';

}

$body .= '
</td>
</tr>
<tr>
    <td>
    亲切问侯,<br/>Name
    </td>
</tr>
</table>
</center>
</body>
';

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: Name <[email protected]>' . "\r\n";

$ok = mail ($_POST['email'], '讲故事给孩子听:您所要求的故事精选书单', $body, $headers);

Результат

ä∏ å¥∏ ryan,

ä»¥ä¸—æ˘¯ä∏ ä»⁄å–œä’ ç∏Œç«˙,ç»˙å–©å–∆è®”æ∑亗è¯≤稗,æ≈•èœ™æ±≠ç˚≥䒜籟å∆ŸåŸ

瑲瑲æ√Œæ˛≈å¤˚ç√±ä∏ 
麜å∑—å¸∞é˝·å°π, å±±å§∫ 

Synopsis: 粗å∂¯ç√±ç˚≥å°∂å∑‰å®ˇå®ˇæ•⁄ä’√牨å®∞ç—¬ç≈’ç˚≥戒åπ∂å‚‘å∑‰åœ√åœ√说å®∞æ˛≈å¤˚ç√±å®∞ã•≠
Age Group: 4 - 6 å”™
Setting: ç≤¤ä∏„
Purpose: ä»·å•πè§≠å‚‘ä¿∞è¿˝äº”å–∆ç˚≥æ≥ƒæ∞∑
Call no: JP MAC

Publisher: 麜å∑—å¸∞é˝·å°π, å±±å§∫. 瑲瑲æ√Œæ˛≈å¤˚ç√±ä∏ .丅海 : 尌咴å≥¿ç«¥åΩºç≈√ç¤≤, 2005.

person rye    schedule 02.04.2010    source источник
comment
Вы должны показать какой-то код - как вы устанавливаете кодировку в электронной почте, например, и как выглядит тарабарщина.   -  person Pekka    schedule 02.04.2010
comment
Может ли быть так, что ваш исходный файл PHP неправильно закодирован на втором сервере? Можете ли вы посмотреть файл на удаленном сервере и убедиться, что кодировка файла по-прежнему UTF-8?   -  person Pekka    schedule 06.04.2010


Ответы (3)


возможно, вам следует закодировать свое сообщение в формате MIME

person ncowboy    schedule 07.04.2010

Являются ли значения «default_charset» в php.ini оба utf8?

Это может вызвать проблему, которую вы видите. Кажется, вы полагаетесь на интерпретатор php, чтобы знать, что сценарий написан в utf-8, так как вы передаете буквальные символы utf-8 в сценарии на электронную почту, а кодировка в заголовках установлена ​​​​на utf-8 ( и это хорошо).

person fret    schedule 20.04.2010

Ваша электронная почта состоит из нескольких частей с простым текстом и html? Или только html? Если это первое, также установите тип содержимого обычного текста на utf-8.

Если это только html, вы можете написать полный html с указанным внутри типом содержимого.

person OmniBus    schedule 07.07.2010