web-dev-qa-db-ja.com

XMLの解析エラー:エンティティ「バージョン」への参照は「;」で終了する必要がありますデリミタ

私はこれにかなり慣れていないので、これが簡単な質問であれば申し訳ありません。

私は私のウェブサイトにボックスのようなFBをインストールしようとしています www.thehungryeurasian.com

ただし、JavaScript SDKを挿入しようとすると、次のようになります。

<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

次のエラーが表示されます。

Error parsing XML, line 884, column 64:
The reference to entity "version" must end with the ';' delimiter.
9

ドキュメントがHTMLではなくXMLとして解釈されているようです。 XMLはHTMLよりもはるかに厳密です-ルールの1つはアンパサンド(&)には特別な意味があります。特殊文字である「XMLエンティティがここに来る」という意味です。たとえば、&quot;を挿入するには"、または&gt;は、>をドキュメントに挿入します。

この場合、コードは&versionこれらのエンティティの1つの開始として6行目で。次のように6行目を更新すると、

js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&amp;version=v2.0";

次に、エラーが消えるはずです。

39
Alex P

ちょうど私自身がこの問題を抱えていました。上記の答えは問題を解決しませんでした。 Facebookボタンが読み込まれません。以下は、サーバーに表示される500エラーの両方を解決し、ボタンを適切にロードできるようにするために実装した修正です。

問題は、XMLを使用するThymeleafのようなものを使用している場合です。ページに追加されるHTMLは適切に形成されている必要があります。 &を使用すると、ページ内で現在のバージョンが使用されている場合、ページの読み込みが500エラーで失敗します。

ボタンにJavascript SDKを含める現在の方法。私たちに従ってください、等のように...

    <div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.3";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

より厳密なXMLチェックを処理するには、機能拡張が必要です。この拡張機能により、XMLデータを適切にエスケープし、CDATAにコメントを付けることで、古いブラウザーで機能するようになります。

<div id="fb-root"></div>
<script>
/* <![CDATA[ */
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.3";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
/* ]]> */
</script>
4
code

タグのすぐ下にコードを配置しましたか?それを配置する必要があるのはそのためです。

0
Navelpluisje