Question

Salut, j'ai quelques XML qui ne validera pas. J'ai PRECISEE le problème à ce bit:

<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>

Je l'ai mis dans un validateur XML et craché:

  

Cette page contient les éléments suivants   erreurs: erreur sur la ligne 1 à la colonne 16:   EntityRef: expecting ';'

Toutes les idées où les disparus « ; » est censé aller? Y at-il un autre problème?

Était-ce utile?

La solution

Vous avez & dans esperluette non échappés votre URL. Ils doivent soit être (a) changé aux entités de caractère (de &amp;) ou (b) entouré d 'une section CDATA.

Une section CDATA vous permet de laisser des caractères spéciaux comme & déprotégés si ce serait plus facile:

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

Vous pouvez inclure tout ce que vous voulez à l'intérieur d'une section CDATA en dehors de la ]]> exacte de la séquence de caractères. Les commentaires de // sont là pour les navigateurs sûrs qui ne comprennent pas les sections CDATA ignorent les marqueurs de <![CDATA[ et ]]>.

Par ailleurs, JavaScript est sensible à la casse. Cela devrait être getElementById pas getelementbyid.

Autres conseils

modifying the content isn't always possible, e.g if you're scraping a website.

you can't just str_replace '&' with '&amp;' because the html might include valid html entities, and you'd get something like "&amp;amp;"

Here's a regex which should replace ampersands with htmlentiries for ampersands, without breaking good htmlentities:

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

I used it to scrape about 700 pages without any problems :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top