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:
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);
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>';
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!