Ошибка проверки: "EntityRef: ожидание ';'"
Привет у меня есть 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: EntityRef: ожидание ';'
есть идеи относительно того, куда должен идти пропавший';'? Есть еще одна проблема?
2 ответов
у вас есть неоткрытые амперсанды &
в вашем URL. Они либо должны быть (a) изменены на символьные сущности (&
), или (b) заключенный в раздел CDATA.
раздел CDATA позволяет оставлять специальные символы, такие как &
unescaped, так что это было бы проще всего:
<script type="text/javascript">
// <![CDATA[
document.getElementById(...).src="...";
// ]]>
</script>
вы можете включить все, что вы хотите внутри раздела CDATA помимо точной последовательности символов ]]>
. The //
комментарии там, чтобы убедиться, что браузеры, которые не понимают Разделы CDATA игнорируют <![CDATA[
и ]]>
метки.
кстати, JavaScript чувствителен к регистру. Это должно быть getElementById
не getelementbyid
.
изменение содержимого не всегда возможно, e.g Если вы очищаете веб-сайт.
вы не можете просто str_replace ' & ' С '&', потому что html может включать допустимые объекты html, и вы получите что-то вроде "&"
вот регулярное выражение, которое должно заменить амперсанды на htmlentiries для амперсандов, не нарушая хорошие htmlentities:
$html = preg_replace("|&([^;]+?)[\s<&]|","& ",$html);
я использовал его, чтобы очистить около 700 страниц без каких-либо проблем :)