يجب أن تنتبه وظيفة GD الخاصة بـ PHP imagettftext() إلى ترميز الأحرف الافتراضي
الكاتب:Eve Cole
وقت التحديث:2009-06-07 15:15:31
أقوم بتطوير وظيفة صغيرة هذه الأيام، وهي تشبه توقيع المنتدى المخصص، فهي تقوم تلقائيًا بإنشاء صورة بها نص بناءً على معلومات العضو. يمكن إجراء عملية دمج الصور باستخدام وظائف مثل imagecopy() وimagecopyresampled()، ومع ذلك، عندما يتعلق الأمر برسم النص، أواجه مشكلة. يتم حفظ القالب النصي في ملف نصي. يقوم البرنامج أولاً بقراءة الملف واستبدال المتغيرات الموجودة فيه بالبيانات، ثم يستخدم الدالة imagettftext() لرسمه على الصورة لسوء الحظ، الصورة المرسومة مشوهة @_@. ...لذلك بحثت عن المشكلات ذات الصلة على Google ووجدت أن معظم الأشخاص كانوا يقولون إن السلسلة التي تم تمريرها في وظيفة imagettftext() تحتاج إلى تشفير UTF-8، كما ينص دليل PHP الرسمي بوضوح على "سلسلة مشفرة UTF-8 "يمكن تمريره مباشرة"، لكن المشكلة تكمن في أن ترميز ملف القالب هو في الأصل UTF-8، وهو أمر محير بعض الشيء. في حالة من اليأس، استخدمت EmEditor لفتح ملف القالب الأصلي، وحاولت تحويله إلى ترميزات مختلفة، وقارنته بالكود المشوش الناتج عن GD. وتبين أنه عندما قمت بالتحويل إلى ترميز EUC-JP، كان في الواقع يطابق الكود المشوه الإخراج بواسطة GD... وهذا يعني أن التشفير الافتراضي لـ GD على الخادم هنا هو EUC-JP، وهو تشفير ياباني. لقد بحثت في إعدادات php.ini ولم أجد أي خيارات ذات صلة، لذلك ظهر سؤال آخر أين توجد مجموعة الترميز الافتراضية هذه؟ كان نيو شقيق Si Wen هو الذي اكتشف أن هناك معلمة "-enable-gd-jis-conv" في معلمات تجميع PHP والتي كانت مشبوهة للغاية. ووجدت Google أن العديد من المشكلات المشوشة كانت مرتبطة بمعلمة التجميع هذه... رسميًا وصف المعلمة هو "GD: تمكين دعم الخطوط اليابانية المعينة بواسطة JIS."، مما يعني أن GD يدعم الخطوط المشفرة باليابانية (اللعنة، لماذا لا يوجد خيار تجميع لدعم الخطوط المشفرة بالصينية...هل تقوم PHP أيضًا بالتمييز ضدها؟ الجنسية = =b)، وبصراحة، قم بتمكينه إذا تم تمكين هذا الخيار، فسيقوم GD بتعيين الأجزاء الأكبر من 127 في مكتبة الخطوط TTF (أي الأجزاء التي لا تنتمي إلى مكتبة الخطوط اللاتينية القياسية) وفقًا لترتيب JIS الياباني، وبعد ذلك سيصبح مشوهًا بشكل طبيعي عند استخدامه لتعيين الخطوط الصينية. دون مزيد من اللغط، قم بإزالة هذا الخيار وأعد الترجمة، وسيتم حل المشكلة. بعد إزالة هذا الخيار، يصبح التشفير الافتراضي لـ imagettftext() UTF-8، ويمكن عرض اللغة الصينية بشكل طبيعي~