Подтвердить что ты не робот

Ссылка на подмножество сущности должна заканчиваться символом ';' ограничитель

Я пытаюсь включить webfonts в шаблон блога Blogger:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html>
<html b:version='2' class='v2' expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
  <head>
    <link href='http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
    <link href='http://fonts.googleapis.com/css?family=Istok+Web:400,700&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
    <meta content='IE=EmulateIE7' http-equiv='X-UA-Compatible'/>
    <b:if cond='data:blog.isMobile'>
      <meta content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0' name='viewport'/>
    <b:else/>

И когда я пытаюсь сохранить шаблон, я получаю:

Error parsing XML, line 5, column 76: The reference to entity "subset" must end with the ';' delimiter.

Я попытался добавить ;, но безуспешно. Ссылки создаются и берутся из веб-шрифта Google.

Как мне решить эту проблему? Спасибо.

4b9b3361

Ответ 1

Это потому, что & является зарезервированным символом в XML, что означает, что "объект XML начинается здесь". Объекты XML позволяют печатать символы или последовательности символов, которые трудно вставлять в документ буквально, либо потому, что у вас его нет на клавиатуре, либо потому, что это запрещает кодирование документа. Например, в (X) HTML &eacute; печатает символ "é", который нелегко найти на большинстве клавиатур США. (Доступные объекты зависят от объявления <!DOCTYPE> вашего XML-документа.)

Проблема с этой схемой заключается в том, что это означает, что вы не можете однозначно оставить литеральные символы & вокруг вашего документа, если они могут быть началом сущности, поэтому вам необходимо закодировать их как сущность для решения этой проблемы.

Вам нужно будет заменить все ваши отклоненные & на &amp;, которые будут печатать & без обращения к парсеру XML. В вашем случае вы должны быть хорошо с заменой &subset= на &amp;subset= в двух тегах <link>.

Ответ 2

Амперсанды в XML указывают начало ссылки на сущность. Он начинается с амперсанда, затем появляется маркер, указывающий, к какому объекту он относится, затем точку с запятой, чтобы положить конец. Чтобы включить литерал амперсанда в документ, вам нужно использовать ссылку на объект символа, которая ссылается на амперсанд, т.е. &amp;.

Как вы этого не сделали, синтаксический анализатор пытается проанализировать следующие данные, как если бы это была ссылка на сущность, а это не так. Вот почему он не выполняет синтаксический анализ - он не может найти запятую в конце ссылки на сущность, потому что она не должна быть ссылкой на сущность.

Например, где у вас есть:

http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext

Вы должны иметь:

http://fonts.googleapis.com/css?family=Share:400,700&amp;subset=latin,latin-ext