Rumah >pembangunan bahagian belakang >masalah PHP >php e-mel aksara bercelaru
Menghantar e-mel dalam PHP ialah fungsi yang sangat biasa. Walau bagaimanapun, ia sangat mengecewakan pengguna apabila aksara yang bercelaru muncul semasa menghantar e-mel, menjadikannya kelihatan tidak boleh dibaca. Artikel ini akan menerangkan punca aksara bercelaru dalam PHP dan menyediakan penyelesaian.
Analisis sebab:
Pertama sekali, anda perlu memahami cara e-mel dihantar. Apabila kami menghantar e-mel, badan e-mel dan maklumat pengepala dibungkus ke dalam mesej e-mel. Mesej e-mel ini perlu mematuhi spesifikasi RFC. Spesifikasi RFC ini merangkumi pelbagai keperluan untuk mesej e-mel, termasuk pengekodan aksara.
Apabila PHP menghantar e-mel, jika anda tidak menyatakan pengekodan aksara yang betul semasa menjana mesej e-mel, ia akan menyebabkan aksara bercelaru. Biasanya, masalah kod bercelaru berlaku apabila pengguna menggunakan aksara bukan ASCII (seperti aksara Cina, aksara Jepun, dll.).
Penyelesaian:
Terdapat banyak cara untuk menyelesaikan masalah e-mel bercelaru dalam PHP. Berikut ialah beberapa penyelesaian:
Sebelum menghantar e-mel, anda perlu menjelaskan pengekodan aksara mesej e-mel ialah. Untuk mengelakkan aksara bercelaru, pengekodan UTF-8 biasanya digunakan.
Menggunakan fungsi mb_language dan mb_send_mail PHP, anda boleh menentukan pengekodan aksara mesej mel secara eksplisit sebagai UTF-8. Kod sampel adalah seperti berikut:
//设置邮件编码 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);
Apabila badan atau pengepala mesej mengandungi aksara bukan ASCII, anda boleh menukar aksara ini kepada entiti. Entiti ialah format khas yang memastikan kestabilan e-mel dan kurang terdedah kepada ralat semasa penghantaran. Kod sampel adalah seperti berikut:
//将标题中的非ASCII字符转换为实体 $subject = '=?UTF-8?B?'.base64_encode('邮件主题').'?='; //将邮件正文中的非ASCII字符转换为实体 $message = '<html><body>' . '<p>' . htmlentities('邮件正文') . '</p>' . '</body></html>';
Untuk mengelakkan aksara bercelaru, anda boleh menetapkan MIME (Mel Internet Serbaguna Extensions) dalam fail pengepala e-mel untuk menentukan jenis kandungan. Contohnya, jika badan e-mel mengandungi kod HTML, anda boleh menambah pengepala Content-Type: text/html
. Kod sampel adalah seperti berikut:
$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";
Ringkasan:
Aksara bercelaru ialah masalah biasa dalam penghantaran e-mel dalam PHP. Terdapat banyak cara untuk menyelesaikan masalah ini, termasuk menentukan pengekodan aksara mesej e-mel, menukar aksara bukan ASCII kepada entiti dan menetapkan fail pengepala dalam pengepala e-mel. Perlu diingatkan bahawa sebelum menghantar e-mel, anda mesti memahami keperluan mesej e-mel untuk mengelakkan masalah yang tidak perlu.
Atas ialah kandungan terperinci php e-mel aksara bercelaru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!