Ошибка проверки: «EntiteRef: ждет»;
-
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: EntiteREF: ожидание «;»
Любые идеи о том, где отсутствуют «;» предполагается идти? Есть ли другая проблема?
Решение
У вас нет необычных амперсандов &
в вашем URL. Они также должны быть (а) изменены на символьные объекты (&
) или (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<&]|","&$1 ",$html);
Я использовал его, чтобы скрепить около 700 страниц без каких-либо проблем :)