متى يكون قسم CDATA ضروريًا داخل علامة البرنامج النصي؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

هل علامات CDATA ضرورية في علامات البرنامج النصي، وإذا كان الأمر كذلك فمتى؟

وبعبارة أخرى، متى وأين يتم ذلك:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

الأفضل على هذا:

<script type="text/javascript">
...code...
</script>
هل كانت مفيدة؟

المحلول

يلزم وجود قسم CDATA إذا كنت بحاجة إلى تحليل مستندك بتنسيق XML (على سبيل المثال.عندما يتم تفسير صفحة XHTML على أنها XML) وتريد أن تكون قادرًا على الكتابة حرفيًا i<10 و a && b بدلاً من i&lt;10 و a &amp;&amp; b, ، حيث سيقوم XHTML بتحليل كود JavaScript كبيانات أحرف تم تحليلها بدلاً من بيانات الأحرف بشكل افتراضي.هذه ليست مشكلة مع البرامج النصية المخزنة في ملفات مصدر خارجية، ولكن بالنسبة لأي JavaScript مضمن في XHTML، من المحتمل تريد استخدام قسم CDATA.

لاحظ أن العديد من صفحات XHTML لم يكن المقصود منها مطلقًا أن يتم تحليلها كـ XML، وفي هذه الحالة لن تكون هذه مشكلة.

للحصول على كتابة جيدة حول هذا الموضوع، راجع https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

نصائح أخرى

عندما تتعامل المتصفحات مع الترميز على أنه XML:

<script>
<![CDATA[
    ...code...
]]>
</script>

عندما تتعامل المتصفحات مع الترميز على أنه HTML:

<script>
    ...code...
</script>

عندما تتعامل المتصفحات مع الترميز على أنه HTML وتريد التحقق من صحة ترميز XHTML 1.0 (على سبيل المثال).

<script>
//<![CDATA[
    ...code...
//]]>
</script>

لغة البرمجة

سيتعامل محلل HTML مع كل شيء بينهما <script> و </script> كجزء من البرنامج النصي. بعض التطبيقات لا تحتاج حتى إلى علامة إغلاق صحيحة؛يوقفون تفسير النص عند "</"، وهو الصحيح حسب قوله المواصفات.

تحديث في HTML5، ومع المتصفحات الحالية، لم يعد هذا هو الحال بعد الآن.

لذلك، في HTML، هذا هو لا ممكن:

<script>
var x = '</script>';
alert(x)
</script>

أ CDATA القسم لديه لا تأثير على الإطلاق.لهذا السبب عليك أن تكتب

var x = '<' + '/script>'; // or
var x = '<\/script>';

أو مشابه.

وينطبق هذا أيضًا على ملفات XHTML التي يتم تقديمها text/html.(نظرًا لأن IE لا يدعم أنواع محتوى XML، فهذا صحيح في الغالب.)

XML

في XML، يتم تطبيق قواعد مختلفة.لاحظ أن المتصفحات (غير IE) تستخدم محلل XML فقط إذا تم تقديم مستند XHMTL مع نوع محتوى XML.

إلى محلل XML، أ script العلامة ليست أفضل من أي علامة أخرى.على وجه الخصوص، قد تحتوي عقدة البرنامج النصي على عقد فرعية غير نصية، يتم تشغيلها بواسطة "<"؛و"&"تشير العلامة إلى كيان شخصي.

لذلك، في XHTML، هذا هو لا ممكن:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

للتغلب على هذه المشكلة، يمكنك لف البرنامج النصي بأكمله في ملف CDATA قسم.هذا يخبر المحلل:'في هذا القسم، لا تعالج "<" و "&" كأحرف تحكم' لمنع محرك JavaScript من تفسير ""<![CDATA[" و "]]>"العلامات، يمكنك تضمينها في التعليقات.

إذا كان البرنامج النصي الخاص بك لا يحتوي على أي "<" أو "&"، لا تحتاج إلى CDATA القسم على أية حال.

في الأساس هو السماح بكتابة مستند بتنسيق XHTML وHTML.تكمن المشكلة في أنه ضمن XHTML، سيقوم محلل XML بتفسير الأحرف &،<،> في ملف النصي علامة وتسبب خطأ في تحليل XML.لذلك، يمكنك كتابة جافا سكريبت الخاص بك مع الكيانات، على سبيل المثال:

if (a &gt; b) alert('hello world');

لكن هذا غير عملي.المشكلة الأكبر هي أنه إذا قرأت الصفحة بتنسيق HTML، فسيتم وضع العلامة النصي يعتبر CDATA "افتراضيًا"، ولن يتم تشغيل JavaScript هذا.لذلك، إذا كنت تريد أن تكون الصفحة نفسها جيدة باستخدام موزعي XHTML وHTML، فأنت بحاجة إلى تضمين النصي علامة في عنصر CDATA في XHTML، ولكن ليس لإحاطته في HTML.

تحدد هذه الخدعة بداية عنصر CDATA كتعليق JavaScript؛في HTML، يتجاهل محلل JavaScript علامة CDATA (إنها تعليق).في XHTML، يكتشفها محلل XML (الذي يتم تشغيله قبل JavaScript) ويعامل الباقي حتى نهاية CDATA على أنه CDATA.

إنه شيء X(HT)ML.عند استخدام رموز مثل < و > داخل جافا سكريبت، على سبيل المثال.لمقارنة عددين صحيحين، يجب تحليل ذلك مثل XML، وبالتالي يتم وضع علامة عليهما كبداية أو نهاية للعلامة.

يعني CDATA أن الأسطر التالية (كل شيء يصل إلى ]]> ليس XML وبالتالي لا ينبغي تحليله بهذه الطريقة.

يفعل لا استخدم CDATA في HTML4 ولكنك يجب استخدم CDATA في XHTML و يجب استخدم CDATA في XML إذا كان لديك رموز غير قابلة للإلغاء مثل < و>.

للتأكد من أن التحقق من صحة XHTML يعمل بشكل صحيح عندما يكون لديك JavaScript مضمنًا في صفحتك، بدلاً من الإشارة إليه خارجيًا.

يتطلب XHTML أن تتوافق صفحتك تمامًا مع متطلبات ترميز XML.نظرًا لأن JavaScript قد تحتوي على أحرف ذات معنى خاص، فيجب عليك تغليفها في CDATA للتأكد من أن عملية التحقق من الصحة لا تشير إلى أنها غير صحيحة.

باستخدام صفحات HTML على الويب، يمكنك فقط تضمين JavaScript المطلوب بين العلامات.عندما تقوم بالتحقق من صحة HTML على صفحة الويب الخاصة بك، فإن محتوى JavaScript يعتبر بمثابة CDATA (بيانات الأحرف) وبالتالي يتم تجاهله بواسطة أداة التحقق.ولا ينطبق الأمر نفسه إذا اتبعت معايير XHTML الأحدث في إعداد صفحة الويب الخاصة بك.مع XHTML، يعتبر الرمز الموجود بين علامات البرنامج النصي PCDATA (بيانات الأحرف التي تم تحليلها) والتي تتم معالجتها بواسطة المدقق.

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

يمكنك أن تتعلم المزيد عن CDATA هنا, ، و المزيد عن XHTML هنا.

يشير CDATA إلى أن المحتويات الموجودة ليست XML.

وهنا شرح على ويكيبيديا

عندما تسعى إلى الامتثال الصارم لـ XHTML، فإنك تحتاج إلى CDATA بحيث لا يتم وضع علامة على علامات الضم كأحرف غير صالحة.

لتجنب أخطاء XML أثناء التحقق من صحة XHTML.

يطلب CDATA من المتصفح عرض النص كما هو وعدم عرضه بتنسيق HTML.

يشير CDATA إلى أن المحتويات الموجودة ليست XML.

يعد CDATA ضروريًا في أي لهجة XML، نظرًا لأنه يتم التعامل مع النص الموجود داخل عقدة XML كعنصر فرعي قبل تقييمه على أنه JavaScript.وهذا هو السبب أيضا يشكو JSLint حول ال < حرف في regexes.

مراجع

بهذه الطريقة لا يقوم المتصفح الأقدم بتحليل كود Javascript ولا تنكسر الصفحة.

التوافق مع الإصدارات السابقة.سوف تحبه.

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