Вопрос

Привет, у меня есть какой-то 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: EntiteREF: ожидание «;»

Любые идеи о том, где отсутствуют «;» предполагается идти? Есть ли другая проблема?

Это было полезно?

Решение

У вас нет необычных амперсандов & в вашем URL. Они также должны быть (а) изменены на символьные объекты (&amp;) или (b) прилагается в раздел CDATA.

Раздел CDATA позволяет вам оставлять специальные символы, такие как & беззаботысь, так что это было бы проще всего:

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

Вы можете включить все, что вы хотите внутри секции CDATA, помимо точной последовательности символов ]]>. Отказ То // Комментарии там, чтобы убедиться, что браузеры, которые не понимают разделы CDATA, игнорируют <![CDATA[ и ]]> маркеры.

Кстати, JavaScript чувствителен к регистру. Которые должны быть getElementById нет getelementbyid.

Другие советы

Изменение контента не всегда возможно, например, если вы соскабливаете веб-сайт.

Вы не можете просто str_replace '&' с '&', потому что HTML может включать в себя действительные HTML-объекты, и вы получите что-то вроде «& amp;»

Вот регулярное выражение, которое должно заменить амперсанды с Htmlentiries для амперсандов, не нарушая хорошие HTMLEntities:

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

Я использовал его, чтобы скрепить около 700 страниц без каких-либо проблем :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top