PDA

View Full Version : سوال: مشکل در نوشتن محتوای فایل json با php



aznadesign
چهارشنبه 15 مرداد 1393, 01:01 صبح
با عرض سلام به همگی
برنامه نویسان محترم
بنده با PHP یه سری کد نوشتم که از دیتابیس یه جدول رو میخونه و اونو تو html نشون میده و تو فایل json مینویسه.
مشکل اینجاست که json نیز مانند برخی زبان ها در حالت عادی از utf-8 پشتیبانی نمیکنه.
سیستمی که نوشتم تو html درست کار میکنه و فارسی نشون میده اما تو json درست کار نمیکنه.
میخواستم اگه میشه کمکم کنید.(در ضمن جهت اطلاع سایت های خارجی رو گشتم نبود تو هم نگرد و هر کی خواست میتونم سورس پروژه رو هم برای دانلود بزارم.)
http://markets.germinews.ir/json
منتظرتون هستم...
با احترام./

2undercover
چهارشنبه 15 مرداد 1393, 10:07 صبح
اتفاقا JSON به صورت پیش فرض از UTF-8 پشتیبانی می کنه. و اگه منظورتون این هست که کاراکتر های فارسی رو به صورت \uXXX نمایش میده این همون کد گذاری کاراکتر های UTF-8 هست و وقتی با تابع json_decode محتویات فایل JSON رو از حالت کد شده در بیارید درست میشن.

مهرداد سیف زاده
چهارشنبه 15 مرداد 1393, 11:37 صبح
البته فک کنم مشکل ایشون در نشون دادن خود فایل json هست و در داخل فایل کاراکترهای unicode به این شکل نشون داده میشن در صورتی که ایشون میخوان متن فارسی عینا نمایش پیدا کنه
خب این مشکلی هست که در php نسخه 5.4 حل شده و اونم استفاده از آرگومان دوم هست به اسم JSON_UNESCAPED_UNICODE و بصورت زیر استفاده میشه


echo json_encode($myarr,JSON_UNESCAPED_UNICODE);


ولی بیشتر هاستها نسخه php بر روی 5.3 هست. برای حل این مشکل من راه حل زیر رو پیشنهاد میدم
1- ابتدا header رو ست کن


header('Content-Type: application/json; charset=utf-8');


2- از تابع زیر برای کارکترها استفاده کن


function jsonRemoveUnicodeSequences($struct) {
return preg_replace("/\\\\\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
}


برنامه به شکل زیر در میاد


<?php
header('Content-Type: application/json; charset=utf-8');

function jsonRemoveUnicodeSequences($struct) {
return preg_replace("/\\\\\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($struct));
}

$myarr = array('نمونه متن فارسی'=>'متن فارسی نمایش ئیدا میکند');

echo jsonRemoveUnicodeSequences(json_encode($myarr));
?>

aznadesign
چهارشنبه 15 مرداد 1393, 16:16 عصر
دوستان ممنون.
دستتون درد نکنه.
از راهنمایی آقا مهرداد استفاده کردم. جواب داد.

mer30boy
جمعه 22 آذر 1398, 15:26 عصر
سلام
فرض کنید با استفاده از echo json_encode($myarr,JSON_UNESCAPED_UNICODE); کاراکتر های فارسی داخل فایل json نوشته شدند . بعدا برای decode کردن همین کاراکتر ها باید از چه روشی استفاده کنم ؟