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 Web Fontから生成および取得されます。
この問題を解決するにはどうすればよいですか?ありがとう。
これは、&
が「XMLエンティティがここから始まる」ことを意味するXMLの予約文字であるためです。 XMLエンティティを使用すると、キーボードにないか、ドキュメントのエンコーディングで禁止されているために、ドキュメントに埋め込むのが難しい文字または一連の文字を印刷できます。たとえば、(X)HTMLでは、é
は文字「é」を出力しますが、これはほとんどのUSキーボードでは簡単に見つけることができません。 (使用可能なエンティティは、XMLドキュメントの<!DOCTYPE>
宣言によって異なります。)
このスキームの問題は、エンティティの先頭になる可能性がある場合、ドキュメントの周囲にリテラル&
文字を明確に残せないことを意味します。そのため、それらをエンティティとしてエンコードして、問題を解決する必要があります。
すべての迷子&
を&
に置き換える必要があります。これにより、XMLパーサーを怒らせることなく&
が出力されます。あなたの場合、2つの&subset=
タグの&subset=
を<link>
で置き換えることをお勧めします。
XMLのアンパサンドは、エンティティ参照の開始を示します。それはアンパサンドで始まり、次にそれが参照しているエンティティを示すマーカーがあり、次にそれを終了するセミコロンがあります。ドキュメントにリテラルアンパサンドを含めるには、アンパサンドを参照する文字エンティティ参照、つまり&
を使用する必要があります。
これを行っていないため、パーサーは次のデータをエンティティ参照であるかのように解析しようとしていますが、そうではありません。そのため、解析に失敗します。エンティティ参照ではないため、エンティティ参照の末尾にセミコロンを見つけることができません。
たとえば、次のような場合:
http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext
次のものが必要です。
http://fonts.googleapis.com/css?family=Share:400,700&subset=latin,latin-ext