Validierung fehlgeschlagen: "EntityRef: Erwartung"; ""
-
26-09-2019 - |
Frage
Hallo, ich habe XML, die nicht bestätigt werden. Ich habe das Problem auf dieses Stück eingegrenzt:
<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>
Ich habe es in einen XML -Validator gestellt und es spuckte aus:
Diese Seite enthält die folgenden Fehler: Fehler in Zeile 1 in Spalte 16: EntityRef: Erwartung ';' ';
Alle Ideen, wo das Vermisste '; soll gehen? Gibt es ein anderes Problem?
Lösung
Sie haben unablässige Verstärker und &
in deiner URL. Sie müssen entweder (a) zu Charaktereinheiten geändert werden (&
) oder (b) in einem CDATA -Abschnitt eingeschlossen.
Mit einem CDATA -Abschnitt können Sie Sonderzeichen wie hinterlassen wie &
unabgeordnet, das wäre also am einfachsten:
<script type="text/javascript">
// <![CDATA[
document.getElementById(...).src="...";
// ]]>
</script>
Sie können alles, was Sie in einem CDATA -Abschnitt wollen, neben der genauen Zeichensequenz einfügen, die Sie wollen ]]>
. Das //
Kommentare sind da, um sicherzustellen, dass Browser, die die CDATA -Abschnitte nicht verstehen, die ignorieren <![CDATA[
und ]]>
Markierungen.
JavaScript ist übrigens Fallempfindlichkeit. Das sollte sein getElementById
nicht getelementbyid
.
Andere Tipps
Das Ändern des Inhalts ist nicht immer möglich, z. B. wenn Sie eine Website abkratzen.
Sie können nicht nur str_replace '&' mit '&'
Hier ist ein Regex, der Verstärker und HTMLentiries für Verstärker ersetzen sollte, ohne gute HTMLEENTitäten zu brechen:
$html = preg_replace("|&([^;]+?)[\s<&]|","&$1 ",$html);
Ich habe es benutzt, um ungefähr 700 Seiten ohne Probleme zu kratzen :)