سؤال

مرحبًا ، لدي بعض XML الذي لن يتحقق من صحة. لقد ضاقت المشكلة لهذا الشيء:

<script type="text/javascript">document.getelementbyid("oxm-1f4a4485-5a1d-45f9-a989-9c65a0b9ceb6").src="http://bid.website.net/display?l=h4siaaaaaaaaad2nmq6cqbrenycw7qjyolfccxmregvcoae0u0sly_agtvaewwn4bg_havwbnebpvmzkkzra_kzzdvoloq4u-hjnp7sii0rxcbzz5vl5kxsrds6wtsfbxmcr9chysuhqbecuckb8cvx4m-pbcxugtdrll6d3dqtihnqukth2yvdkptr67cuzfvlxjlinkul9634lpal_h4mwhso8aabzhw1cdcwjxl6xivgv8agrjxjc_gaaaa==&p=h4siaaaaaaaaabxkmq7cmaxaurcqjjrrsfqqsrm7x3fsrwyvosda8qnj_3ojfgb49o45pblq7e80syzjhopggso9wyzpcpntzkxk1ldtbbi7otmxfj9da1wpjcf10vtxdj9e5_utyj19k2lfssepld5agnqaaaa=&url=http%3a%2f%2flocalhost%2fproject-debug%2fproject.html";</script>

لقد وضعته في مدقق XML ويصفق:

تحتوي هذه الصفحة على الأخطاء التالية: خطأ في السطر 1 في العمود 16: EntityRef: توقع "؛" ؛

أي أفكار حول مكان المفقود "؛" من المفترض أن يذهب؟ هل هناك مشكلة أخرى؟

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

المحلول

لديك ampersands دون تكييف & في عنوان URL الخاص بك. إما أنهم بحاجة إلى تغيير (أ) إلى كيانات الشخصية (&amp;) ، أو (ب) محاط في قسم CDATA.

يتيح لك قسم CDATA ترك شخصيات خاصة مثل & دون ملحق ، بحيث يكون أسهل:

<script type="text/javascript">
// <![CDATA[
    document.getElementById(...).src="...";
// ]]>
</script>

يمكنك تضمين أي شيء تريده داخل قسم CDATA بصرف النظر عن تسلسل الأحرف الدقيق ]]>. ال // التعليقات موجودة للتأكد من أن المتصفحات التي لا تفهم أقسام CDATA تتجاهل <![CDATA[ و ]]> علامات.

بالمناسبة ، JavaScript حساس للحالة. التي ينبغي أن تكون getElementById ليس getelementbyid.

نصائح أخرى

تعديل المحتوى ليس ممكنًا دائمًا ، على سبيل المثال ، إذا كنت تقوم بتجميع موقع ويب.

لا يمكنك فقط str_replace "و" مع "&" لأن HTML قد تتضمن كيانات HTML صالحة ، وستحصل على شيء مثل "& amp ؛"

فيما يلي Regex الذي يجب أن يحل محل ampersands بـ htmlentiries لـ ampersands ، دون كسر htmlentities جيدة:

$html = preg_replace("|&([^;]+?)[\s<&]|","&amp;$1 ",$html);

لقد استخدمته لكشط حوالي 700 صفحة دون أي مشاكل :)

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