سؤال

عند استخدام وظيفة التضمين في php، يتم تنفيذ التضمين بنجاح، ولكنه يُخرج أيضًا حرفًا قبل إخراج مخرجات التضمين، ويكون الحرف ذو قيمة سداسية عشرية 3F وليس لدي أي فكرة عن مصدره، على الرغم من أنه يبدو كذلك يحدث مع كل تشمل.

في البداية اعتقدت أن الأمر يتعلق بترميز الملف، لكن لا يبدو أن هذا يمثل مشكلة.لقد قمت بإنشاء حالة اختبار لإثبات ذلك:(الرابط لم يعد يعمل) http://driveefficiency.com/testinclude.php يتكون هذا الملف من:

<? include("include.inc"); ?>

و include.inc يتكون من:

<? echo ("hello, world"); ?> 

ومع ذلك فإن الناتج هو: "؟مرحبا بالعالم" أين ال ؟هو حرف ذو قيمة عشوائية.هذه هي القيمة التي لا أعرف أصولها، وهي تؤدي في بعض الأحيان إلى إفساد مواقعي قليلاً.

أي أفكار من أين يمكن أن يأتي هذا؟في البداية اعتقدت أن الأمر قد يكون متعلقًا بتشفير الملفات، لكنني لا أعتقد أنها مشكلة.

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

المحلول

ما تراه هو علامة ترتيب بايت UTF-8:

تمثيل UTF-8 لـ BOM هو تسلسل البايت EF BB BF، والذي يظهر كأحرف ISO-8859-1 - في معظم برامج تحرير النصوص ومتصفحات الويب غير المجهزة للتعامل مع UTF-8.

علامة ترتيب البايت على ويكيبيديا

لا تفهم PHP أن هذه الأحرف يجب أن تكون "مخفية" وترسلها إلى المتصفح كما لو كانت أحرفًا عادية.للتخلص منها، ستحتاج إلى فتح الملف باستخدام محرر نصوص "مناسب" يسمح لك بحفظ الملف بتنسيق UTF-8 بدون قائمة مكونات الصنف (BOM) البادئة.

يمكنك قراءة المزيد عن هذه المشكلة هنا

نصائح أخرى

يبدو أن خادم الويب الخاص بك (أو محرر النصوص الخاص بك) يتضمن ملف بوم في الوثيقة.لا أرى الشخصية المارقة في متصفحي إلا عندما أقوم بضبط ترميز الموقع بشكل صريح على Latin-1.ثم أرى اثنين (!) BOMs UTF-8.

/يحرر:من حقيقة أن هناك اثنين BOMs أستنتج أن BOM تم تضمينه بالفعل بواسطة المحرر الخاص بك في بداية الملف.ما المحرر الذي تستخدمه؟إذا كنت تستخدم Visual Studio، فيجب أن تقول "حفظ باسم..." في القائمة "ملف" ثم تختار الزر "حفظ بالتشفير...".هناك، اختر "UTF-8 بدون BOM" أو شيء مشابه.

لا يظهر على الصفحة المعروضة في Firefox أو IE ولكن يمكنك رؤية الشخصية المضحكة عند عرض المصدر في IE

enter image description here

هل هذا على جهاز لينكس؟هل يمكنك البحث عن vim أو sed واستبدالهما لمعرفة ما إذا كان بإمكانك التخلص من 3F بهذه الطريقة؟

إذا كان يعمل بنظام التشغيل Windows، فحاول فتح include.inc باستخدام برنامج "المفكرة" لمعرفة ما إذا كان الحرف المضحك مرئيًا ويمكن حذفه.

سأكون فضوليًا أيضًا لمعرفة ما يحدث إذا قمت بنسخ الكود من التضمين وتشغيله بمفرده.

حرف 3F في الواقع يكون علامة الاستفهام، فهي لا تظهر كعلامة واحدة فقط.

حصلت على نفس النتائج التي حصل عليها توماس، ولم تظهر أي علامة استفهام.

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

أرى hello, world في الصفحة التي قمت بالارتباط بها.لا توجد مشاكل أستطيع أن أرى ...

أنا أستخدم Firefox 3.0.1 وWindows XP.ما المتصفح/نظام التشغيل الذي تقوم بتشغيله؟ربما قد تكون هذه هي المشكلة.

سأكون فضوليًا أيضًا لمعرفة ما يحدث إذا قمت بنسخ الرمز من التضمين وقمت بتشغيله بنفسه.

علامة:هذا موجود في حل استضافة مشترك، لذا لا يمكنني الوصول إلى الملف.ومع ذلك، كما ترون هنا, ، لا توجد أحرف لا ينبغي أن تكون هناك، وتشغيل نفس الملف كبرنامج نصي لا ينتج عنه هذا الحرف.(لم تقدم شركة الاستضافة المشتركة أي مساعدة، وأخبرتني باستمرار أن هذه مشكلة في المتصفح).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top