検証が失敗しました:「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バリデーターに入れて、それを吐き出します:
このページには、次のエラーが含まれています。16行目の1行目のエラー:entityRef:equing ';'
失われた場所に関するアイデア ';'行くことになっていますか?別の問題はありますか?
解決
あなたは無効なアンパサンドを持っています &
URLで。 (a)キャラクターエンティティに変更する必要があります(&
)、または(b)CDATAセクションに囲まれています。
CDATAセクションを使用すると、特殊文字を次のように残すことができます &
脱却していないので、それは最も簡単です:
<script type="text/javascript">
// <![CDATA[
document.getElementById(...).src="...";
// ]]>
</script>
正確な文字シーケンス以外に、CDATAセクションの内部に必要なものを含めることができます ]]>
. 。 //
コメントCDATAセクションを理解していないブラウザが無視することを確認するために <![CDATA[
と ]]>
マーカー。
ちなみに、JavaScriptはケースに敏感です。そうあるべきです getElementById
いいえ getelementbyid
.
他のヒント
たとえば、コンテンツを変更することは常に可能ではありません。たとえば、Webサイトを削っている場合。
htmlには有効なHTMLエンティティが含まれている可能性があり、「&amp;」のようなものが得られるため、str_replace '&' with '&'をwithすることはできません。
これは、良いhtmlentitiesを破ることなく、アンパサンドをアンパサンドのhtmlentiriesに置き換える必要がある正規表現です。
$html = preg_replace("|&([^;]+?)[\s<&]|","&$1 ",$html);
私はそれを使用して問題なく約700ページをこすります:)