im создание формы на моем сайте. Я хочу, чтобы клиенты могли писать и отправлять греческие символы, но в почте им получалось что-то вроде этого. Я попытался изменить кодировку на UTF-8 с помощью этого кода:
mail($recipient, $subject, '=?UTF-8?B?'.base64_encode($content).'?=');
Код Thsis работает на другом сервере, который протестировал его, но не работает на моем сервере. Может ли кто-нибудь помочь?
Вот мой полный код php
<?php if ((isset($_POST['name'])) && (strlen(trim($_POST['name'])) > 0)) { $name = stripslashes(strip_tags($_POST['name'])); } else {$name = 'No name entered'; } if ((isset($_POST['lastname'])) && (strlen(trim($_POST['lastname'])) > 0)) { $lastname = stripslashes(strip_tags($_POST['lastname'])); } else {$lastname = 'No name entered'; } if ((isset($_POST['nomos'])) && (strlen(trim($_POST['nomos'])) > 0)) { $nomos = stripslashes(strip_tags($_POST['nomos'])); } else {$nomos = 'No name entered'; } if ((isset($_POST['polh'])) && (strlen(trim($_POST['polh'])) > 0)) { $polh = stripslashes(strip_tags($_POST['polh'])); } else {$polh = 'No name entered'; } if ((isset($_POST['address'])) && (strlen(trim($_POST['address'])) > 0)) { $address = stripslashes(strip_tags($_POST['address'])); } else {$address = 'No name entered'; } if ((isset($_POST['TK'])) && (strlen(trim($_POST['TK'])) > 0)) { $TK = stripslashes(strip_tags($_POST['TK'])); } else {$TK = 'No name entered'; } if ((isset($_POST['email'])) && (strlen(trim($_POST['email'])) > 0)) { $email = stripslashes(strip_tags($_POST['email'])); } else {$email = 'No email entered'; } if ((isset($_POST['phone'])) && (strlen(trim($_POST['phone'])) > 0)) { $phone = stripslashes(strip_tags($_POST['phone'])); } else {$phone = 'No phone entered'; } if ((isset($_POST['sxolia'])) && (strlen(trim($_POST['sxolia'])) > 0)) { $sxolia = stripslashes(strip_tags($_POST['sxolia'])); } else {$sxolia = 'Δεν υπάρχουν σχόλια'; } ob_start(); ?> <html> <head> <style type="text/css"> </style> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <table width="550" border="1" cellspacing="2" cellpadding="2"> <tr bgcolor="#eeffee"> <td>Όνομα</td> <td><?=$name; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Επίθετο</td> <td><?=$lastname; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Νομός</td> <td><?=$nomos; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Πόλη</td> <td><?=$polh; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Διεύθυνση</td> <td><?=$address; ?></td> </tr> <tr bgcolor="#eeffee"> <td>T.Κ</td> <td><?=$TK; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Τηλέφωνο</td> <td><?=$phone; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Email</td> <td><?=$email; ?></td> </tr> <tr bgcolor="#eeffee"> <td>Σχόλια</td> <td><?=$sxolia; ?></td> </tr> </table> </body> </html> <? $body = ob_get_contents(); $to = 'mymail@yahoo.gr'; $email = 'mymail@yahoo.gr'; $fromaddress = "address"; $fromname = "Online Contact"; require ("phpmailer.php"); $mail = new PHPMailer(); $mail -> From = "address"; $mail -> FromName = "Book Order"; $mail -> AddAddress("mymail@gmail.com", "Name 5"); $mail -> WordWrap = 50; $mail -> IsHTML(true); $mail -> Subject = "Book Form: Book form submitted"; $mail -> Body = $body; $mail -> AltBody = "This is the text-only body"; if (!$mail -> Send()) { $recipient = 'mymail@yahoo.gr'; $subject = 'Contact form failed'; $content = $body; $header = 'Content-type: text/html; charset=UTF-8' . "\r\n"; mail($recepient,$subject, '=?UTF-8?B?'.base64_encode($content).'?=', $header); exit ; } ?>
Синтаксис кодированного слова ожидается для объекта или других значений поля заголовка, но не для тела; там вы можете использовать MIME и Content-Type :
$headerFields = array('MIME-Version: 1.0', 'Content-Type: text/plain;charset=utf-8'); mail($recipient, '=?UTF-8?B?'.base64_encode($subject).'?=', $content, implode("\r\n", $headerFields));
Попробуй это.
$header = 'Content-type: text/plain; charset=UTF-8' . "\r\n"; mail($recepient,$subject, '=?UTF-8?B?'.base64_encode($content).'?=', $header);
используйте Content-type: text / html, если вы отправляете html-адрес электронной почты.
Откуда возникает $content
? Вы делаете что-то вроде substr($content)
который не является многобайтовым , перед тем, как отправить его (?)?
/* Set internal character encoding to UTF-8 */ mb_internal_encoding("UTF-8"); $headers = 'MIME-Version: 1.1'; $headers .= 'Content-type: text/html; charset=utf-8'; $headers .= "From: $name <$email>"; $headers .= "Return-Path: $emailTo"; $headers .= "Reply-To: $email"; $headers .= "X-Mailer: PHP/". phpversion();
Я нашел решение в сети через 8 часов, столкнувшись с одной и той же проблемой …
Это сработало для меня (php, html form и mysql) =>