15

我正在尝试在 Blogger 博客的模板中包含 webfonts:

<?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 Web Font 生成和获取的。

我应该如何解决这个问题?谢谢。

4

2 回答 2

51

这是因为&是 XML 中的一个保留字符,意思是“一个 XML 实体从这里开始”。XML 实体允许您打印难以按字面意思嵌入到文档中的字符或字符序列,这可能是因为您的键盘上没有它,或者是因为文档编码禁止它。例如,在 (X)HTML 中,&eacute;打印字符“é”,这在大多数美式键盘上都不容易找到。(可用实体取决于<!DOCTYPE>您的 XML 文档的声明。)

该方案的问题在于,如果文字&字符可以作为实体的开头,您就不能在文档周围明确地留下文字字符,因此您需要将它们编码为实体来解决该问题。

您将需要用 替换所有杂散&&amp;这将打印&而不会激怒 XML 解析器。在您的情况下,您应该擅长在两个标签中替换&subset=by 。&amp;subset=<link>

于 2013-01-01T17:03:23.107 回答
6

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
于 2013-01-01T17:03:22.360 回答