سؤال

سؤال سريع، كيف يمكنني إجراء هذا صحيحا:

if($this->datos->bathrooms == "1½"){$select1 = JText::_( 'selected="selected"' );}

ال ½ لا يبدو أنه معترف به. حاولت أن أكتبها ½ ولكن بعد ذلك يبدو ½ حرفيا، وليس ½ إشارة. أيه أفكار؟

هل كانت مفيدة؟

المحلول

كما لاحظ العديد من الآخرين، لديك مشكلة ترميز الشخصية، على الأرجح. لست متأكدا من الترميزات دعم PHP ولكن عليك أن تأخذ الصورة بأكملها في الاعتبار. لهذا المثال، أفترض أن البرنامج النصي PHP يستجيب لنموذج النموذج.

  1. يكتب بعض التطبيقات (لك، على الأرجح) بعض HTML يتم ترميزه باستخدام بعض الترميز وإرساله إلى المتصفح. الخيارات الشائعة هي ISO-8859-1 و UTF-8. يجب عليك دائما استخدام UTF-8 إذا استطعت. ملاحظة: إنه ليس الافتراضي للويب (للأسف).
  2. يقوم المتصفح بتنزيل هذا HTML ويعرض الصفحة. تستخدم المستعرضات Unicode داخليا، معظمها، أو بعض المكسرات. يقدم المستخدم نموذجا. يتم تشفير البيانات الموجودة في هذا النموذج، وعادة مع نفس الترميز التي تم إرسالها فيها الصفحة. لذلك إذا قمت بإرسال UTF-8، فسيتم إرسالها إليك كمادة UTF-8.
  3. يقرأ PHP البايتات من الطلب الوارد وإنشاء المتغيرات الداخلية لها. هذا هو المكان الذي قد تواجهه مشكلة، إذا لم يكن اختيار الترميز الصحيح.
  4. تقوم بعمل مقارنة سلسلة، والتي تتحلل مقارنة بايت، ولكن البايتات التي تشكل الأحرف تعتمد على الترميز المستخدم. كما كتب بيتر بيلي,

    • في ISO-8859-1 يتم ترميز هذه الشخصية باسم 0xbd
    • في UTF-8 يتم ترميز هذه الحرف باسم 0xC2BD

تحتاج إلى التحقق من ترميز النص على طول كل خطوة على الطريق للتأكد من حدوث ذلك كما تتوقع. يمكنك التحقق من البيانات المرسلة إلى المتصفح عن طريق تغيير الترميز من الترميز المكشوف تلقائيا للمتصفح إلى شيء آخر لمعرفة كيفية تغيير الصفحة.

إذا كانت بياناتك لا تأتي من المتصفح، بل من DB، فأنت بحاجة إلى التحقق من الترميزات بين تطبيقك و DB.

أخيرا، أقترح أنه غير عملي لاستخدام سلسلة مثل 1½ كإجراء مقارنة كما أنت. أود أن أوصي باستخدام 1.5 واكتشاف ذلك في وقت العرض، ثم تغيير كيفية عرض البيانات فقط. المزايا: يمكنك طلب النتائج حسب عدد الحمامات إذا كانت القيمة رقمية بدلا من سلسلة، وما إلى ذلك بالإضافة إلى تجنب الأخطاء مثل هذا واحد.

نصائح أخرى

الشخصية التي تبحث عنها هي حرف Unicode الكسر المبتذلة نصف

هناك العديد من الطرق للتأكد من أنك تعرض هذه الشخصية بشكل صحيح، والتي تعتمد كل ذلك على ترميز بياناتك. بالنظر هنا يمكننا أن نرى أن

  • في ISO-8859-1، ترميز غربي شهير، هذه الشخصية ترميز BD
  • في UTF-8، ترميز دولي شهير، هذه الشخصية مشفرة C2BD

ما يعنيه هذا هو أنه إذا كان ملف PHP الخاص بك هو Outf-8 مشفرة، لكنك ترسل هذا إلى المتصفح ك ISO-8850-1 (أو العكس الآخر)، لن يتم تقديم الشخصية بشكل صحيح.

كما نشر آخرون، يمكنك أيضا استخدام كيان HTML لهذه الشخصية التي ستكون ترميز حرف ترميزها وستقدم دائما (في HTML) بشكل صحيح، بغض النظر عن ترميز الإخراج.

حاول مقارنة ذلك "1½"

استخدم PHP. chr وظيفة لإنشاء الحرف عن طريق hex 0xbd أو 189 ديسمبر:

if($this->datos->bathrooms == "1".chr(189)){$select1 = JText::_( 'selected="selected"' );}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top