PDA

View Full Version : سوال: تبدیل انکودینگ windows-1256 به utf-8



میـلاد
شنبه 05 بهمن 1387, 18:13 عصر
سلام
من از این کد استفاده میکنم اما بعضی وقت ها عمل نمیکنه، یعنی انکود windows-1256 را utf-8 تشخیص میده.



if(mb_detect_encoding($str) != 'utf-8')
{
$str = iconv('windows-1256','utf-8', $str);
}

در ضمن توجه داشته باشید ورودی کد زیر از دوحالت خارج نیست یا windows-1256 هست یا utf-8، اما بعضی وقتها mb_detect_encoding انکود windows-1256 را utf-8 بر میگردونه که با عث میشه کد عمل نکنه.
کسی پیشنهادی داره؟
تنکس

reza saam
شنبه 05 بهمن 1387, 22:46 عصر
میشه یه سوالی بپرسم؟
قراره کدی که مینویسی چه کاری کنه؟ منطق برنامه؟

میـلاد
یک شنبه 06 بهمن 1387, 01:36 صبح
یه خزنده و کالکتور که اطلاعات سایت های فارسی را جمع آوری میکنه.
از اونجا که خیلی از سایت های دولتی و خبر گزاری ها از انکود عربی استفاده میکنن باید محتوا را به یونیکد تبدیل و ذخیره کرد.

morison
پنج شنبه 17 بهمن 1387, 20:26 عصر
1- مواردی رو که اشتباه برمیگردونه بررسی کنید و ببینید وجه مشترکشون چیه و مشکل رو برطرف کنید.
2- یک الگوریتم غیر از توابع کتابخوانه ای برای تشخیص انکودینگ پیدا کنید. یعنی خودتون یه تابع بنویسید که این کار رو انجام بده. که البته این هم لازمش اینه که ببینید صفحات arabic چه مشخه ی مشترکی دارند.

(http://forum.persiantools.com/showthread.php?t=120167)

میـلاد
جمعه 18 بهمن 1387, 08:57 صبح
سلام
من مشکلم این بود که دنبال اربیک میگشتم، به جای اربی دنبال یونیکد گشتم و مشکلم حل شد. با استفاده از تابع زیر:


<?php

// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {

// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);

} // function is_utf8

?>