解析 XML 时出错:对实体“版本”的引用必须以“;”结尾分隔符[重复]

Posted

技术标签:

【中文标题】解析 XML 时出错:对实体“版本”的引用必须以“;”结尾分隔符[重复]【英文标题】:Error parsing XML : The reference to entity "version" must end with the ';' delimiter [duplicate] 【发布时间】:2014-07-27 00:42:30 【问题描述】:

我对此很陌生,如果这是一个简单的问题,我很抱歉。

我正在尝试将 FB like 框安装到我的网站 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.

【问题讨论】:

它在某种意义上是重复的,但我敢打赌,大量的百里香开发人员在这种情况下会遇到这个错误,即复制粘贴 fb 代码。我建议您保留这个问题,因为它对于非常具体和非常常见的问题非常有用 【参考方案1】:

看起来有些东西正在将您的文档解释为 XML 而不是 html。 XML 比 HTML 严格得多 - 规则之一是 & 符号 (&amp;) 具有特殊含义。它们的意思是“这里有一个 XML 实体”,这是一个特殊字符。例如,您可以键入&amp;quot; 以插入",或键入&amp;gt; 以将> 插入到您的文档中。

在这种情况下,您的代码将第 6 行的 &amp;version 解释为这些实体之一的开始。如果您按如下方式更新第 6 行:

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

然后您应该会发现错误消失了。

【讨论】:

非常感谢!不仅是为了解决问题,还教我一些新东西! 是的,在我的情况下,当我将它替换为 &它奏效了【参考方案2】:

我自己也遇到了这个问题。上面的答案没有解决问题。 Facebook 按钮不会加载。下面是我为解决服务器上出现的 500 错误并允许正确加载按钮而实施的修复。

问题在于,如果您使用的是 Thymeleaf 之类的使用 XML 的东西。添加到页面的 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>

【讨论】:

【参考方案3】:

你把代码放在标签下面了吗? 因为那是它需要放置的地方。

【讨论】:

感谢您这么快回复我。我没有'' 标签,虽然我有''。我能找到的最接近的是 '' 所以我把它直接放在下面?

以上是关于解析 XML 时出错:对实体“版本”的引用必须以“;”结尾分隔符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java stax:对实体“R”的引用必须以“;”结尾分隔符

对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。

xml引用实体报错怎么回事?

错误:(2) 解析 XML 时出错:XML 或文本声明不在实体 android studio 的开头

对实体“f”的引用必须以“;”结尾分隔符

XML注入攻击