PDA

View Full Version : حرفه ای: مشکل با json_encode



binyaft
سه شنبه 07 تیر 1390, 16:57 عصر
سلام .
من برای ذخیره کردن یکسری اطلاعات از json_encode استفاده میکنم ، اما این تابع با فارسی و کلا یونیکد مشکل داره ! میخواستم بدونم کسی میدنه باید چیکار کرد!؟ خودم یک تابع نوشتم برای این کار اما میخوام بدونم خود PHP راه حلی برای این مشکل داره!؟


ممنون :قلب:

eAmin
سه شنبه 07 تیر 1390, 18:06 عصر
برای اینکه اطلاعات unicode درست encode بشن، اگر این اطلاعات از دیتابیس گرفته شده باید به همراه جدولهاش unicode انتخاب شده باشه و بعلاوه اینکه خود فایل php ای که استفاده میکنید utf-8 باشه و header زیر رو ست کرده باشید و یا از تگ meta برای اینکار استفاده کنید:


header('Content-type: text/html; charset=utf-8');

binyaft
سه شنبه 07 تیر 1390, 18:15 عصر
من تست کردم اما نشد! خروجی به صورت زیر در میاد! :(

{"Google":"\u06af\u06af\u06af\u06af\u06af"}

eAmin
سه شنبه 07 تیر 1390, 19:11 عصر
خب الان مشکل چیه؟ اینها همون کاراکترها هستند که به utf-8 تبدیل شدند. و شما خیلی راحت می تونید از اینها استفاده کنید:


$a = array('Google' => 'گوگل');
$d = json_encode($a);
echo $d."<br />"; // {"Google":"\u06af\u0648\u06af\u0644"}
print_r(json_decode($d)); // stdClass Object ( [Google] => گوگل )

در سمت کاربر اگر از JavaScript استفاده کنید، خود به خود این کاراکترها تبدیل میشن مثل کاری که json_decode در بالا انجام داد.

binyaft
سه شنبه 07 تیر 1390, 19:28 عصر
خب وقتی اطلاعات بیشتری رو بخوایم تبدیل کنیم حجمش زیاد میشه ! یعنی برای هر کاراکتر شش کاراکتر!

eAmin
سه شنبه 07 تیر 1390, 20:55 عصر
بنده هم خیلی جستجو کردم ولی متاسفانه تا جایی که بنده جستجو کرد php بصورت درونی همچین امکانی رو محیا نکرده. به ناچار باید از توابع سفارشی خودمون برای اینکار استفاده کنیم!
اگر مشکلتون قبلا با تابعی که نوشتید حل شده که هیچ، ولی اگر بخواید میشه تابعی نوشت که توابعی که بصورت یونیکد escape شده رو به حروف فارسی تبدیل کرد.

binyaft
چهارشنبه 08 تیر 1390, 00:34 صبح
یه تابع نوشتم خودش به json تبدیل میکنه مشکلی نداره ;)

ممنون