2010-04-02 3 views
0

J'envoie du courrier via PHP avec des caractères chinois de mon serveur de test, et il l'envoie parfaitement. L'encodage est UTF-8. Lorsque je télécharge le même fichier PHP sur un autre serveur et que j'essaie d'envoyer des e-mails à partir de là, 90% d'entre eux vont dans un client de messagerie (GMail), mais dans un autre client de messagerie (Apple Mail) tous les charabia - même lorsque j'essaie de changer l'encodage dans le client de messagerie.Les caractères chinois dans le courrier électronique envoyé par PHP n'apparaissent pas

Je suis coincé ici, parce que tout fonctionne bien sur un serveur mais pas sur un autre. Je ne suis pas sûr de savoir où commencer à chercher des solutions. Ce qui est encore plus déroutant, c'est que sur le serveur de production, l'e-mail semble plutôt correct (cas étrange de certains caractères ne s'affichent pas), mais dans d'autres applications de messagerie, cela ressemble à de la foutaise.

Une idée où je peux commencer à chercher pour résoudre ce problème?

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); 

Résultat

ä∏ å¥∏ ryan, 

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

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

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

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

Vous devriez montrer du code - comment vous définissez l'encodage dans le E-Mail, par exemple, et à quoi ressemble le charabia. –

+0

Se pourrait-il que * votre fichier source PHP * soit codé de manière incorrecte sur le second serveur? Pouvez-vous regarder le fichier sur le serveur distant et assurez-vous que l'encodage du fichier est toujours UTF-8? –

Répondre

0

peut-être vous devriez encoder votre message au format MIME

0

sont les valeurs de "default_charset" dans le php.ini à la fois utf8?

Cela pourrait être en mesure de causer le problème que vous voyez. Il semble que vous vous fiez à l'interpréteur php pour savoir que le script est écrit en utf-8, car votre passage littéral utf-8 caractères dans le script à l'email, et le charset est dans les en-têtes est mis à utf-8 (ce qui est bon).

0

Est-ce que vous envoyez des emails en plusieurs parties avec du texte brut et html? Ou seulement html? S'il s'agit du premier, définissez également le type de contenu du texte brut sur utf-8. S'il s'agit uniquement de html, vous pouvez écrire un html complet avec le type de contenu spécifié à l'intérieur.

Questions connexes