بي أتش بي:الترميز الحالي المستخدم لإرسال البيانات إلى المتصفح

StackOverflow https://stackoverflow.com/questions/130511

  •  02-07-2019
  •  | 
  •  

سؤال

كيف يمكنني معرفة الترميز الذي سيستخدمه PHP عند إرسال البيانات إلى المتصفح؟أي.باستخدام رأس Cotent-Type، على سبيل المثال:ايزو-8859-1.

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

المحلول

عادةً ما يتم تكوين خوادم Apache + PHP الخاصة بمضيفي الويب للإرسال لا charset header.أقصر طريقة لاختبار كيفية تكوين الخادم الخاص بك هي:

  • يستخدم هذه الأداة لرؤية رأس الخادم عن طريق الحصول على أي واحدة من صفحاتك على webiste الخاص بك.إذا رأيت في رؤوس الخادم ملف charset فهذا يعني أن خادمك يستخدمه، وعادةً لن يحتوي على ملف charset.
  • هناك طريقة أخرى وهي تشغيل هذا البرنامج النصي البسيط على خادمك: <?php echo ini_get('default_charset'); ?> كما ذكر أعلاه، عادةً ما يطبع هذا سلسلة فارغة، وإذا كانت مختلفة فسوف تظهر لك charset من PHP.

الحل الثاني هو افتراض عدم تكوين Apache مع AddDefaultCharset some_charset وهذا ليس هو الحال عادةً، ولكن في مثل هذه الحالة أخشى أن إعداد Apache قد يتجاوز توجيه PHP deafult_charset ini.

نصائح أخرى

يمكنك استخدام حل header() الذي اقترحه William، ولكن إذا كنت تقوم بتشغيل Apache، وكان تكوين Apache يستخدم مجموعة أحرف افتراضية، فسوف يفوز ذلك في كل مرة (سيصبح Internet Explorer مجنونًا) راجع: AddDefaultCharset

ضع في اعتبارك أن أنواع المحتوى والترميزات شيئان مختلفان.النص/html هو نوع المحتوى؛ISO-8859-1 وUTF-8 هما ترميزان.

عادةً ما يبدو رأس استجابة HTTP الذي يرسله الخادم كما يلي:

Content-Type: text/html; charset=utf-8

"مجموعة الأحرف" هي في الواقع ترميز الأحرف.إنه ليس في رأس منفصل؛ومع ذلك، يوجد رأس يسمى "Content-Encoding" والذي يحدد في الواقع نوع الضغط الذي تستخدمه الاستجابة (على سبيل المثال:غزيب).

إذا كنت تريد تغيير ترميز الأحرف إلى UTF-8، في ملف يحتوي على HTML:

<?
header("Content-Type: text/html; charset=utf-8");

يمكنك تعيين بنفسك مع header('Content-type: xxx/yyy');, ، لكنني أعتقد أن النص/html يتم إرساله افتراضيًا.

AFAIK، PHP يرسل سلاسل بايت.أي أنه إذا كانت متغيراتك تحتوي على UTF-8، فسوف ترسل UTF-8.إذا كان لديك ISO-8859-1، فسوف يرسل ذلك أيضًا.إذا قمت بخلطهم، فلن يكون الأمر جميلاً.

إذا لم يتم تكوين الخادم الخاص بك ليحتوي على محتوى أو مجموعة أحرف افتراضية، وكذلك PHP، فسترسل PHP فقط Content-Type: text/html - لن يحدد مجموعة محارف على الإطلاق، وسيرسل البايتات كما يراها في البرنامج النصي.

إذا تلقى المتصفح صفحة بدون تحديد مجموعة أحرف، فيمكن أن تحدث أشياء مختلفة:

  • تحتوي معظم المتصفحات على قائمة "Encoding/Charset"؛إذا اختار المستخدم واحدًا بشكل صريح، فسيحاول المتصفح تطبيقه.لا يحدث ذلك كثيرًا، لذا:
  • تحاول بعض المتصفحات عرضه باستخدام مجموعة أحرف افتراضية (والتي تعتمد على اللغة، على سبيل المثال:لFF وcs_CZ كان عليه أن يكون iso-8859-2;YMMV)
  • سيحاول IE تحديد مجموعة الأحرف بشكل تجريبي (سوف يستغرق الأمر تخمينًا، بناءً على توزيع الأحرف - وفي كثير من الأحيان ينجح في ذلك؛في بعض الأحيان يخطئ الأمر وتحصل على صفحة باللغة الرومانية يتم تفسيرها على أنها نص صيني، وهو ما يعني عادةً "غير قابل للقراءة")
  • ستعود بعض المتصفحات القديمة us-ascii

إذا تطابقت مجموعة أحرف البرنامج النصي PHP ومجموعة أحرف المتصفح مع هذا الإجراء، فسيكون النص - عن طريق الخطأ - قابلاً للقراءة.إذا لم يكن الأمر كذلك، فستكون هناك علامات غريبة وظواهر مماثلة.

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