PDA

View Full Version : ارسال کاراکتر فارسی با استفاده از تابع mail



abbas3zaar
چهارشنبه 15 آبان 1398, 21:12 عصر
من یه فرم تماس با ما دارم چند تا مشکل دارم:
1 - اول اینکه حروف فارسی مینویسم و ارسال میزنم خطا میده
2 - توی contact.php اون خط های اولش که senderName رو preg_replace کرده فکر کنم نمیزاره فارسی نوشته بشه درسته؟ اون خط رو چجوری باید بنویسم؟
3- توی همون خط وقتی preg_replace رو پاک میکنم فارسی ارسال میشه ولی توی ایمیلم به این شکل(عکس زیر) علامت سوال نشون میده:
150925

از دوستان دو تا خواهش دارم:

4 - اولی اینکه در خصوص مورد 2 که بالا گفتم برای ایمن کردن اون input از چه تابعی باید استفاده کنم؟ htmlspecialchars یا stripslashes ؟؟؟ کدش چجوری نوشته میشه؟
5 - در خصوص نمایش علامت سوال چیکار باید بکنم؟ منظورم کدشه. میدونم که باید utf8 ارسال بشه اما توی کد قرار دادم ولی نمیدونم درست نوشتم یا نه.

کدهای فرم: index.php





<div class="contact-form">
<h4>فرم تماس با من</h4>
<form id="contactForm" action="php/contact.php" method="post">
<div class="row">
<div class="col-md-8">
<textarea name="message" id="message" rows="6" placeholder="متن پیام"></textarea>
</div>
<div class="col-md-4">
<input type="text" name="senderName" id="senderName" placeholder="نام شما">
<input type="email" name="senderEmail" id="senderEmail" placeholder="ایمیل شما">
<input type="text" name="subject" id="subject" placeholder="موضوع پیام">
<button type="submit">ارسال پیام</button>
</div>

</div>
</form>
<div id="successMessage" class="successmessage">
<p><span class="success-ico"></span> باتشکر، پیام شما با موفقیت ارسال شد.</p>
</div>
<div id="failureMessage" class="errormessage">
<p><span class="error-ico"></span> هنگام ارسال پیام مشکلی پیش آمد. لطفا دوباره تلاش کنید.</p>
</div>
<div id="incompleteMessage" class="statusMessage">
<p>لطفاً قبل از ارسال ، کلیه قسمتها را در فرم تکمیل کنید.</p>
</div>
</div>






این هم کدهای contact.php





<?php

// Define some constants
define( "RECIPIENT_NAME", "abbas" );
define( "RECIPIENT_EMAIL", "info@domainname.ir" );
define( "EMAIL_SUBJECT", "$subject" );

// Read the form values
$success = false;
$senderName = isset( $_POST['senderName'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['senderName'] ) : "";
$senderEmail = isset( $_POST['senderEmail'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['senderEmail'] ) : "";
$subject = isset( $_POST['subject'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_POST['subject'] ) : "";
$message = isset( $_POST['message'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_POST['message'] ) : "";

// If all values exist, send the email
if ( $senderName && $senderEmail && $message ) {
$recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
$headers = "Content-type: text/html; charset=UTF-8" . "\r\n" . "MIME-Version: 1.0" . "\r\n" . "From: " . $senderName . " <" . $senderEmail . ">";


$success = mail( $recipient, $subject , $message, $headers );
}

// Return an appropriate response to the browser
if ( isset($_GET["ajax"]) ) {
echo $success ? "success" : "error";
} else {
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ارسال پیام</title>
<link rel="stylesheet" href="css/pfonts.css" >
</head>
<body style="margin: 0; padding: 0;">
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="direction:rtl;">
<tr>
<td style="padding: 10px 0 30px 0;">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="400" style="border: 1px solid #cccccc; border-collapse: collapse;">
<tr>
<td align="center" bgcolor="#131313" style="padding: 40px 0 30px 0; color: #153643; font-size: 28px; font-weight: bold; font-family: iransans;">
<img src="https://sitename.ir/images/amlogo.png" alt="Abbas Masrour Logo" width="300" style="display: block;" />
</td>
</tr>
<tr>
<td bgcolor="#ffffff" style="padding: 40px 30px 40px 30px;">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<?php if ( $success ) { echo'
<tr>
<td style="text-align:center; color: #153643; font-family: iransans; font-size: 24px;">
<span style="color:#53d219;"><b>پیام شما با موفقیت ارسال شد</b></span>
</td>
</tr>
<tr>
<td style="text-align:justify; padding: 20px 0 30px 0; color: #153643; font-family: iransans; font-size: 16px; line-height: 20px;">
با تشکر از شما کاربر عزیز، پیام شما برای من ارسال شد و در اسرع وقت پاسخگو خواهم بود. در صورت وجود هرگونه مشکل با شماره تماس داخل سایت در ارتباط باشید. موفق باشید.
</td>
</tr>

'; } ?>
<?php if ( !$success ) echo '<tr>
<td style="text-align:center; font-family: iransans; font-size: 24px;">
<span style="color:#f70a0a;"><b>خطایی در ارسال رخ داد!</b></span>
</td>
</tr>
<tr>
<td style="text-align:justify; padding: 20px 0 30px 0; color: #153643; font-family: iransans; font-size: 16px; line-height: 20px;">
متاسفانه در فرایند ارسال پیام خطایی رخ داده است، لطفا مجددا تلاش کنید و در صورت وجود مشکل با شماره تلفن موجود در سایت تماس بگیرید. موفق باشید.
</td>
</tr>' ?>
<tr>
<td style="text-align:center; padding: 20px 0 30px 0; color: #153643; font-family: iransans; font-size: 16px; line-height: 20px;">
<a href="https://sitename.ir/" style="padding: 15px 20px; background-color: #44b710; border-radius: 30px; color:#fff; text-decoration: none;">بازگشت به سایت</a>
</td>
</tr>

</table>
</td>
</tr>

</table>
</td>
</tr>
</table>
</body>
</html>


<?php
}
?>

plague
پنج شنبه 16 آبان 1398, 01:49 صبح
متن پیام رو تغییر بده توش کارکاتر عای انگلیسی بزار ببین چی میشه
بعضی وقتا مشکل از ایمیل نیست ... متنی که ارسال میکنی مشکل داره

abbas3zaar
پنج شنبه 16 آبان 1398, 11:00 صبح
متن پیام رو تغییر بده توش کارکاتر عای انگلیسی بزار ببین چی میشه
بعضی وقتا مشکل از ایمیل نیست ... متنی که ارسال میکنی مشکل داره

http://uupload.ir/files/w2wm_311.jpg

وقتی این کد رو به متغییر header اضافه کردم متن پیام فارسی شده ولی نام فرستنده و موضوع پیام علامت سواله:



$headers = "Content-type: text/html; charset=UTF-8" . "\r\n" . "MIME-Version: 1.0" . "\r\n" . "From: " . $senderName . " <" . $senderEmail . ">";



و اینکه همین پیامی که علامت سواله توی اپ gmail گوشیم توی webmail سایتم میرم درست نشون میده فارسی رو همون پیام رو !
انگلیسی هم گذاشتم لای حروف فارسی.
عکس:
150927

ali_sed
شنبه 18 آبان 1398, 08:10 صبح
سلام

کاری که شما کردید فقط برای زمانی است که email client قابلیت نمایش html خود را فعال کرده باشد در غیر اینصورت در حالت text ایمیل به درستی نمایش پیدا نمی کند.
شما باید از utf-8 boundry استفاده کنید و متن خود را کد کنید. بجای این کار توصیه می کنم از کلاس phpmailer استفاده کنید داخل مثلاها توضیح داده چیکار کنید.

اگر خودتان میخواهید کد کنید مثلا متن سابجکت را بصورت زیر ارسال کنید:


$s= "=?utf-8?b?".base64_encode($s)."?=";