فشل التحقق من الصحة: "entityref: توقع" ؛ "
-
26-09-2019 - |
سؤال
مرحبًا ، لدي بعض 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 الخاص بك. إما أنهم بحاجة إلى تغيير (أ) إلى كيانات الشخصية (&
) ، أو (ب) محاط في قسم 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<&]|","&$1 ",$html);
لقد استخدمته لكشط حوالي 700 صفحة دون أي مشاكل :)