Не удается разобрать амперсанд с expat. Неверный токен?

Я получаю ошибку expat при анализе только определенных символов. Другой HTML-код анализируется просто отлично. Я использую библиотеку expat libexpatMT.lib UTF-8 и работаю с char и std::string в оболочке. Широкие символы и т. д. не используются.

// The ampersand leads to: Expat error: *not well-formed (invalid token)*
<a href="http://www.myurl.com?a=b&c=d">Link</a>
<span>Tom & Jerry</span>
<h1>K&auml;se</h1>

Я не понимаю, почему амперсанд может быть здесь недопустимым токеном, поскольку он используется даже в таких объектах HTML, как &amp;. Замена амперсандов на &amp; или пользовательские разделители также не работает.

Какие-либо предложения? Здесь проблема в амперсандах.


person Smamatti    schedule 28.07.2011    source источник


Ответы (1)


В XML вы экранируете амперсанд даже в сущностях. Таким образом, допустимое значение равно <a href="http://www.myurl.com?a=b&amp;c=d">Link</a>
Правильные веб-страницы делают это. Однако браузеры вполне терпимы к вашей ошибке.

person PhiLho    schedule 28.07.2011
comment
Это не работает. Кажется, мне нужно «двойное экранирование» таких значений, как: &amp;auml; для текста типа <div>Tom&amp;Jerry</div> Спасибо! - person Smamatti; 28.07.2011
comment
Там что-то не так, проверьте, возможно, в вашем коде не происходит двойного преобразования/неэкранирования. - person PhiLho; 29.07.2011