Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-E-Mail verstümmelte Zeichen

PHP-E-Mail verstümmelte Zeichen

WBOY
WBOYOriginal
2023-05-07 10:35:081029Durchsuche

Das Versenden von E-Mails in PHP ist eine sehr häufige Funktion. Allerdings ist es für Benutzer sehr frustrierend, wenn beim Versenden von E-Mails verstümmelte Zeichen erscheinen, die sie unleserlich erscheinen lassen. In diesem Artikel werden die Ursachen für verstümmelte Zeichen in PHP erläutert und Lösungen bereitgestellt.

Ursachenanalyse:

Zunächst müssen Sie verstehen, wie E-Mails versendet werden. Wenn wir eine E-Mail senden, werden der E-Mail-Text und die Header-Informationen in eine E-Mail-Nachricht gepackt. Diese E-Mail-Nachricht muss der RFC-Spezifikation entsprechen. Diese RFC-Spezifikation deckt verschiedene Anforderungen für E-Mail-Nachrichten ab, einschließlich der Zeichenkodierung.

Wenn PHP eine E-Mail sendet und beim Generieren der E-Mail-Nachricht nicht die richtige Zeichenkodierung angegeben wird, führt dies zu verstümmelten Zeichen. Normalerweise tritt das Problem mit verstümmeltem Code auf, wenn Benutzer Nicht-ASCII-Zeichen verwenden (z. B. chinesische Zeichen, japanische Zeichen usw.).

Lösung:

Es gibt viele Möglichkeiten, das Problem verstümmelter E-Mails in PHP zu lösen. Hier sind einige der Lösungen:

  1. Geben Sie die Zeichenkodierung der E-Mail-Nachricht an

Bevor Sie die E-Mail senden, müssen Sie klären, wie die Zeichenkodierung der E-Mail-Nachricht lautet. Um verstümmelte Zeichen zu vermeiden, wird üblicherweise die UTF-8-Kodierung verwendet.

Mit den PHP-Funktionen mb_lingual und mb_send_mail können Sie die Zeichenkodierung der E-Mail-Nachricht explizit als UTF-8 angeben. Der Beispielcode lautet wie folgt:

//设置邮件编码
mb_language('uni'); 
mb_internal_encoding('UTF-8'); 

//发送邮件
$to = 'to@example.com';
$subject = '邮件主题';
$message = '邮件正文';
$headers = 'From: from@example.com' . "\r\n" .
    'MIME-Version: 1.0' . "\r\n" .
    'Content-type: text/html; charset=UTF-8' . "\r\n" .
    'Reply-To: reply-to@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mb_send_mail($to, $subject, $message, $headers);
  1. Konvertieren Sie Nicht-ASCII-Zeichen in Entitäten.

Wenn der E-Mail-Text oder -Header Nicht-ASCII-Zeichen enthält, können diese Zeichen in Entitäten umgewandelt werden. Entity ist ein spezielles Format, das die Stabilität der E-Mail gewährleistet und weniger fehleranfällig bei der Übertragung ist. Der Beispielcode lautet wie folgt:

//将标题中的非ASCII字符转换为实体
$subject = '=?UTF-8?B?'.base64_encode('邮件主题').'?=';

//将邮件正文中的非ASCII字符转换为实体
$message = '<html><body>' .
           '<p>' . htmlentities('邮件正文') . '</p>' .
           '</body></html>';
  1. Legen Sie die Header-Datei im E-Mail-Header fest

Um verstümmelte Zeichen zu vermeiden, können Sie die MIME-Header-Datei (Multipurpose Internet Mail Extensions) im E-Mail-Header festlegen, um den Inhalt anzugeben Typ. Wenn der E-Mail-Text beispielsweise HTML-Code enthält, können Sie den Header Content-Type: text/html hinzufügen. Der Beispielcode lautet wie folgt:

$headers = "From: from@example.com\r\n";
$headers .= "Reply-To: reply-to@example.com\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

Zusammenfassung:

Verstümmelte Zeichen sind ein häufiges Problem beim Senden von E-Mails in PHP. Es gibt viele Möglichkeiten, dieses Problem zu lösen, einschließlich der Angabe der Zeichenkodierung der E-Mail-Nachricht, der Konvertierung von Nicht-ASCII-Zeichen in Entitäten und der Festlegung von Header-Dateien im E-Mail-Header. Bitte beachten Sie, dass Sie vor dem Versenden einer E-Mail die Anforderungen der E-Mail-Nachricht verstehen müssen, um unnötige Probleme zu vermeiden.

Das obige ist der detaillierte Inhalt vonPHP-E-Mail verstümmelte Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn