تعمل وظيفة PHP json_encode على تحويل سلاسل UTF-8 إلى كيانات سداسية عشرية: لماذا وكيف يتم حلها
يمكن لوظيفة PHP json_encode تشفير متغيرات PHP إلى JSON (ترميز كائن JavaScript). ومع ذلك، عند التعامل مع أحرف Unicode بتشفير UTF-8، قد تقوم الوظيفة بتحويلها إلى كيانات سداسية عشرية بشكل افتراضي. وذلك لأن JSON لا يدعم أصلاً أحرف UTF-8، وهي أحرف متعددة البايت تمثل أحرف غير ASCII.
لماذا تقوم PHP بتحويل سلاسل UTF-8 إلى كيانات سداسية عشرية؟
تستخدم وظيفة json_encode الخاصة بـPHP مواصفات JSON، التي تنص على أن أحرف Unicode غير القابلة للتمثيل كأحرف ASCII يجب ترميزها باستخدام تسلسلات الهروب السداسية العشرية. وهذا يضمن التوافق مع التطبيقات والأجهزة القديمة التي قد لا تدعم UTF-8.
حل مشكلة التحويل
لحل هذه المشكلة وتجنب تحويل UTF-8 سلاسل إلى كيانات سداسية عشرية، قدمت PHP خيار JSON_UNESCAPED_UNICODE في الإصدار 5.4.0. يوجه هذا الخيار json_encode لاستخدام نقاط كود Unicode بدلاً من تسلسلات الهروب السداسية العشرية للأحرف غير ASCII.
مثال
لنفترض أن لديك برنامج PHP النصي التالي:
سيقوم هذا الرمز بإخراج سلسلة JSON التالية، حيث يتم ترميز الأحرف السيريلية ككيانات سداسية عشرية:
"\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u0438 \u0433\u0440\u0435\u0448\u043a\u0430."
لإخراج أحرف UTF-8 مباشرة، يمكنك استخدام خيار JSON_UNESCAPED_UNICODE:
سينتج عن ذلك سلسلة JSON التالية، حيث يتم تمثيل الأحرف السيريلية باستخدام نقاط كود Unicode الخاصة بها:
"База данни грешка."
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3