实体名称必须紧跟在实体引用中的“&”之后。
本文将介绍一个出现在代码中的问题:The entity name must immediately follow the '&' in the entity reference(实体名必须紧跟在实体引用中的'&'之后)。我们将解释这个问题出现的原因,并给出解决方法。
在代码中,如果想要使用特殊字符(如 '&'、'<'、'>'等),需要对其进行转义,以避免与HTML或XML中的标记混淆。例如,'&'需要被转义为'&','<'需要被转义为'<','>'需要被转义为'>'。
然而,在给定的代码示例中,开发者没有使用CDATA标记对脚本标记内的内容进行转义,也没有手动转义XHTML字符。这导致在引用实体时出现了错误。例如,'&'被错误地写成了'&'。
为了解决这个问题,我们可以在脚本标记内添加CDATA标记,将脚本内容包裹起来,告诉解析器不需要转义其中的特殊字符。CDATA标记的语法是:'//
以下是修复后的代码示例:
<script> //<![CDATA[ var el = document.getElementById("pacman"); if (Modernizr.canvas && Modernizr.localstorage && Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) { window.setTimeout(function () { PACMAN.init(el, "./"); }, 0); } else { el.innerHTML = "Sorry, needs a decent browser<br /><small>" + "(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>"; } //]]> </script>
通过在脚本标记内添加CDATA标记,我们告诉解析器不需要对脚本内容中的特殊字符进行转义。这样可以避免出现实体引用错误的问题。希望本文能够帮助读者理解并解决这个问题。
问题的原因是在XML文档中使用了JavaScript代码,而XML解析器将其中的"&"字符解释为XML实体引用。当"&"后面没有紧跟着"#"时,解析器会隐式地寻找五个预定义的实体名称(lt、gt、amp、quot和apos)或任何手动定义的实体名称。由于在这种情况下,"&"被用作JavaScript运算符而不是XML实体,所以会出现XML解析错误,错误信息为"The entity name must immediately follow the '&' in the entity reference"。
解决方法一是将XML特殊字符进行转义,将"&"转义为"&"。例如,将if语句中的"&"替换为"&"。但这样会使JavaScript代码变得难以阅读和维护。
解决方法二是将JavaScript代码放在自己的JS文件中,并通过