PDA

View Full Version : مشکل با subject ایمیل هایی که دارای عنوان فارسی هستند



Jason.Bourne
چهارشنبه 08 دی 1389, 18:44 عصر
من از طریق IMAP به Mailbox خودم وصل می شوم و ایمیل ها را از این طریق از سرور دریافت می کنم. همه چیز خوب انجام میشه بجز ایمیل هایی که subject آنها فارسی هست.
subject این ایمیل ها را نمی توانم درست نمایش دهم. یعنی یک ایمیل که عنوان آن مثلا "‎[funiran4u]‎ مــرد شراب فروش | کسی که تو را بخاطر خودت دوست دارد | مرمت برج کج پیزا در ایتالیا با لیزر و سرنگ | " است در برنمه من به شکل زیر نمایش داده می شود (تاکید می کنم؛ فقط عنوان ایمیل به هم ریخته است)


?UTF-8?B?Rnc6IFtmdW5pcmFuNHVdINmF2YDZgNix2K8g2LTYsdin2K gg2YHYsdmI?= =?UTF-8?B?2LQgfCDaqdiz24wg2qnZhyDYqtmIINix?= =?UTF-8?B?2Kcg2KjYrtin2LfYsSDYrtmI2K/YqiDYr9mI2LM=?= =?UTF-8?B?2Kog2K/Yp9ix2K8gfCDZhdix2YXYqiDYqA==?= =?UTF-8?B?2LHYrCDaqdisINm+24zYstinINiv2LEg2Kc=?= =?UTF-8?B?24zYqtin2YTbjNinINio2Kcg2YTbjNiy2LEg?= =?UTF-8?B?2Ygg2LPYsdmG2q8gfCDYtNqp2YjZhNin2qnYsw==?=

shahriyar3
چهارشنبه 08 دی 1389, 20:36 عصر
دوست عزیز
سابجکت ایمیل شما با کاراکتر هائی شروع میشه که معادلی تو اسکی براش نیست بخاطر همین نمیتونه تبدیل به utf-8 بشه
سابجکت بدون اینها را امتحان کنید


] و | و "

Jason.Bourne
چهارشنبه 08 دی 1389, 20:46 عصر
فرمت و استاندارد اولیه این عنوان چی هست و به چی باید تبدیل بشه که به این شکل در می آید؟

shahriyar3
چهارشنبه 08 دی 1389, 20:56 عصر
فرمت و استاندارد اولیه این عنوان چی هست و به چی باید تبدیل بشه که به این شکل در می آید؟
اول حل شد مشکلت یا نه؟؟

Jason.Bourne
چهارشنبه 08 دی 1389, 21:58 عصر
شما شاید متوجه منظور من نشدید!

من از طریق IMAP محتوای یک میل باکس را دریافت میکنم و دست من نیست که چه کاراکترهایی در Subject ایمیل ها باشد و چه کاراکترهایی نباشد!

shahriyar3
چهارشنبه 08 دی 1389, 22:27 عصر
شما شاید متوجه منظور من نشدید!

من از طریق IMAP محتوای یک میل باکس را دریافت میکنم و دست من نیست که چه کاراکترهایی در Subject ایمیل ها باشد و چه کاراکترهایی نباشد!
فرقی نداره مشکل از همون پیدا نکردن معادل ascii است

=?UTF-8?B?
ولی اینجا یه تابع هست ببین شاید با این حل شه
http://geoland.org/2007/12/utf8-ready-php-mail-function/

Jason.Bourne
چهارشنبه 08 دی 1389, 22:36 عصر
ممنون. اون را بررسی می کنم.
اما نگفتین چه پروسه ای برای این تبدیل باید انجام بشه. منظورم اینه مقدار اولیه چی هست و باید به چی تبدیل بشه که به این شکل در میاد؟!

shahriyar3
پنج شنبه 09 دی 1389, 01:15 صبح
ممنون. اون را بررسی می کنم.
اما نگفتین چه پروسه ای برای این تبدیل باید انجام بشه. منظورم اینه مقدار اولیه چی هست و باید به چی تبدیل بشه که به این شکل در میاد؟!
یه پروتکلی در سال 2001 تصویب شده در مورد "نوع پیغام اینترنتی" که توی این پروتوکل فرستنده ایمیل به هر زبانی موظف یه چیز هائی رو رعایت کنه مثل استفاده نکردن از کاراکتر های غیر مجاز اسکی در subject و ....
سر فصل های خیلی زیادی داره
بعضی از کاراکتر های استفاده شده تو این سابجکت هم همین مشکل و داره!
مثلا یه قانونی داره نباید طول هر خط از 998 کاراکتر بیشتر باشه!
و این قانونی که باعث شما این خطا برای شما نمایش داده بشه اینه

A field
name MUST be composed of printable US-ASCII characters (i.e.,
characters that have values between 33 and 126, inclusive)

امیـرحسین
پنج شنبه 09 دی 1389, 13:03 عصر
میتونید از این تابع استفاده کنید:

/**
* Copyrights:
* 1- http://php.net/manual/en/function.imap-header.php#11220
* 2- BonoHolidays Company
* 3- Boplo.ir
*/
function fixSubject($subject) {
if(preg_match("/=\?.{0,}\?[Bb]\?/", $subject)) {
$subject = preg_split("/=\?.{0,}\?[Bb]\?/", $subject);
foreach($subject as $key => $value) {
if(preg_match("/\?=/",$value)) {
$arrTemp = preg_split("/\?=/", $value);
$arrTemp[0] = base64_decode($arrTemp[0]);
$subject[$key] = join("", $arrTemp);
}
}
$subject = join("", $subject);
}
if(preg_match("/=\?.{0,}\?Q\?/", $subject)) {
$subject = quoted_printable_decode($subject);
$subject = preg_replace("/=\?.{0,}\?[Qq]\?/", "", $subject);
$subject = preg_replace("/\?=/", "", $subject);
}
return trim($subject);
}