سؤال

أقوم الآن بتطوير مواقع الويب وواجهات XML منذ 7 سنوات ، ولم يأت أبدًا في موقف ، حيث كان من الضروري حقًا استخدام &gt; ل >. يمكن حتى الآن التعامل مع كل الغموض من خلال الاقتباس <, &, " و ' وحده.

هل كان أي شخص في حالة ما (يتعلق ، على سبيل المثال ، معالجة SGML ، وقضايا المتصفح ، XSLT ، ...) حيث وجدت أنه لا يمكن التعرف على الهروب من العلامة الأكبر مع &gt;?

تحديث: لقد راجعت للتو مع مواصفات XML, ، حيث تقول ، على سبيل المثال ، حول بيانات الأحرف في القسم 2.4:

بيانات الأحرف

[14]      CharData       ::=      [^<&]* - ([^<&]* ']]>' [^<&]*)

حتى هناك ، > غير مذكور على أنه شيء مميز ، باستثناء تسلسل نهاية قسم CDATA.

هذه حالة واحدة ، حيث > هو أي أهمية ، سيكون نهاية قسم CDATA ، ]]>, ، ولكن مرة أخرى ، إذا كنت تقتبس ذلك ، فإن الاقتباس (أي ، السلسلة الحرفية ]]&gt;) سوف يهبط حرفيا في الإخراج (لأنه هو CDATA).

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

المحلول

لا تحتاج إلى أن يفهم أي مترجم XML تقريبًا ما تعنيه. ولكن لا تزال تستخدم شخصية خاصة دون أي حماية إذا قمت بذلك.

XML هو كل شيء عن الدلالي ، وهذا ليس متوافقا الدلالي حقا.

عنك تحديث, ، لقد نسيت هذا الجزء:

يمكن تمثيل شريحة الزاوية الصحيحة (>) باستخدام السلسلة ">" ، ويجب ، من أجل التوافق ، الهروب باستخدام أي منهما " &gt; "أو مرجع حرف عندما يظهر في السلسلة" ]]> "في المحتوى ، عندما لا تضع هذه السلسلة نهاية قسم CDATA.

حالة الاستخدام الواردة في الوثائق تدور حول شيء مثل هذا:

<xmlmarkup>
]]>
</xmlmarkup>

هنا ]]> يمكن أن يكون الجزء مشكلة مع محلات SGML القديمة ، لذلك هو يجب أن نهرب إلى = ]]&gt; لأسباب التوافق.

نصائح أخرى

إستعملت واحد ليس 19 ساعة منذ تمرير مدقق XML صارم. هناك حالة أخرى عندما تستخدمها فعليًا في نص محتوى HTML/XML (بدلاً من السمات) ، مثل هذه: <.

بالتأكيد ، سوف يقبل محلل LAX معظم أي شيء ترميه فيه ، ولكن إذا كنت قلقًا على XSS ، <هو صديقك.

تحديث: إليك مثال تحتاج فيه إلى الهروب > في Firefox:

<?xml version="1.0" encoding="utf-8" ?>
<test>
    ]]>
</test>

منحت ، لا يزال ليس مثالا على الاضطرار إلى الهروب من وحيد >.

ليس بقدر مؤلف مستندات (X) HTML ، ولكن أكثر كمستخدم لحقول التعليقات المكتوبة قذرة في مواقع الويب ، والتي "تقدم" لإدراج HTML.

أعني إذا قمت بعمل موقعك بالطريقة الصحيحة ، فلن تنطلق من المحتوى الخاص بك على أي حال ، أليس كذلك؟ لذلك مكالمتك إلى htmlentities أو أيا كان (لا ترى ، PHP) سوف يهتم باستبدال الشخصيات الخاصة لك. بالتأكيد ، لن تكتب يدويًا &gt; لكن أتمنى أن تتخذ التدابير > يتم استبداله تلقائيا.

لقد فكرت للتو في مثال آخر ، حيث تحتاج إلى اقتباس > في HTML5 (ليس XHTML5) المستندات: إذا كنت في حاجة إليها في سمات بدون عروض أسعار (وهو شيء ، يمكن مناقشته بالطبع).

<img src=arrow.png alt=&gt;>

يجب أن يكون مكافئًا لـ XHTML

<img src="arrow.png" alt=">" />

ولكن بعد ذلك مرة أخرى، (؟

تخيل أن لديك النص التالي this is a not a ]]> nice day وقررت أن تحيط بها بواسطة أقسام CDATA <![CDATA[this is a not a ]]> nice day]]>.

من أجل تجنب ذلك (وللسماح بتحليل شظايا SGML مع أقسام ملحوظة غير محددة) ، يعلن البند 10.4 من ISO 8879: 1986 ذلك وقوع ]]> خارج قسم ملحوظ هو خطأ.

وأيضًا ، في أوقات SGML ، كانت الأقسام المحددة شائعة جدًا ، حيث لم يتم استخدامها فقط في CDATA (كما في XML) ، ولكن أيضًا بالنسبة إلى RCDATA (فقط الكيانات ومراجع الأحرف المسموح بها) وتجاهل وتضمين (مما يسمح بالتعرف على العلامات داخلهم).

على سبيل المثال ، في SGML يمكن للمرء أن يكتب:

 <!ENTITY %WHATTODO "INCLUDE">
 <![%WHATTODO;[<b>]]&gt;</b>]]>

وهو ما يعادل:

 <b>]]&gt;</b>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top