PDA

View Full Version : رشته های Multibyte و ساخت متغیرهای Unicode



bTajahmadi
یک شنبه 07 مرداد 1386, 14:35 عصر
با اینکه extension مربوط به Multibyte Strings را در php.ini فعال کرده ام و Internal_encoding را هم UTF-8 تنظیم کرده ام، اما متغیرهایی که در کد PHP می سازم هنوز ASCII هستند و ضمنا استفاده از تابع mb_convert_encoding نمی تواند encoding متغیر persian_text را تغییر دهد.


$persian_text = "";
$persian_text = mb_convert_encoding($persian_text,'UTF-8','ASCII');


کسی تا حالا با این مشکل برخورد کرده و آیا راه حلی برای اینکه متغیر را از ابتدا با encoding یونی ساخت وجود دارد؟

oxygenws
یک شنبه 07 مرداد 1386, 15:02 عصر
چطوری با اسکی فارسی نوشتی؟؟
این کد ات هیچ بخش فارسی ای نداره، دقیقا بگو چطوری با فارسی داری کار می کنی و می خوای به چه نتیجه ای برسی.

bTajahmadi
یک شنبه 07 مرداد 1386, 17:17 عصر
با عرض معذرت، نام متغیر persian_text گمراه کننده بود.
مساله از اینجا شروع شد :
یک رشته ی یونی (UTF-8) دارم که از طریق متود POST از یک فرم دریافت شده است. در این رشته هم نویسه های لاتین و هم عربی وجود دارد. می خواهم واژه های معدودی را در آن جستجو کنم و در صورت یافت شدن واژه های مذکور در رشته، آن ها را با واژه های دیگری جایگزین کنم. طبیعتا ترجیح می دهم که واژه های مورد جستجو را در چند متغیر ذخیره کنم و سپس آن ها را در رشته یونی جستجو کنم. جالب اینجاست که با واژه های عربی (فارسی) مشکلی ندارم اما متغیر هایی که باید مقادیر لاتین را در خود ذخیره کنند به یونی تبدیل نمی شوند. مثلا :


search_string_1 = "Crack";

PHP این مقدار را به صورت ASCII ذخیره می کند. پس سعی می کنم آن را با تابع mb_convert_encoding یا mb_convert_variables به یونی تبدیل کنم تا بتوانم آن را در رشته یونی ام جستجو کنم.


mb_convert_encoding($search_string_1,'UTF-8','ASCII')

یا

mb_convert_variables('UTF-8','ASCII', $search_string_1);

اما هیچکدام از دو تابع بالا encoding رشته (search_string_1) را به UTF-8 تبدیل نمی کند!

دقیقا نمی دانم چرا توابع عمل نمی کنند. امیدوارم توضیحم روشن بوده باشد.

oxygenws
یک شنبه 07 مرداد 1386, 23:04 عصر
اصولا نیازی به تبدیل کاراکتر ها نیست.
۱- مسلما یونیکد تمامی سه زبونی که گفتی رو پشتیبانی می کنه.
۲- کاراکتر های یونیکد مجموعه ای از بایت ها هستند که در نهایت جزو همون ۲۵۶ تا کاراکتر اند.
۳- ترکیب «بایت» هایی که «کاراکتر» های مثلا کلمهء «سلام» رو تشکیل میده، در هر جایی از یک رشتهء یونیکد، باز هم مفهوم «سلام» رو داره. پس نیازی به تبدیل رشته ها نیست.

در نهایت ممکنه مختصری منظورت رو نفهمیده باشم، اما فکر کنم فهمیدم :دی