【问题标题】:Validation Failed: "EntityRef: expecting ';'"验证失败:“EntityRef:期待';'”
【发布时间】:2010-08-07 17:02:56
【问题描述】:

您好,我有一些无法验证的 XML。我已将问题缩小到这一点:

<script type="text/javascript">document.getelementbyid("oxm-1f4a4485-5a1d-45f9-a989-9c65a0b9ceb6").src="http://bid.website.net/display?l=h4siaaaaaaaaad2nmq6cqbrenycw7qjyolfccxmregvcoae0u0sly_agtvaewwn4bg_havwbnebpvmzkkzra_kzzdvoloq4u-hjnp7sii0rxcbzz5vl5kxsrds6wtsfbxmcr9chysuhqbecuckb8cvx4m-pbcxugtdrll6d3dqtihnqukth2yvdkptr67cuzfvlxjlinkul9634lpal_h4mwhso8aabzhw1cdcwjxl6xivgv8agrjxjc_gaaaa==&p=h4siaaaaaaaaabxkmq7cmaxaurcqjjrrsfqqsrm7x3fsrwyvosda8qnj_3ojfgb49o45pblq7e80syzjhopggso9wyzpcpntzkxk1ldtbbi7otmxfj9da1wpjcf10vtxdj9e5_utyj19k2lfssepld5agnqaaaa=&url=http%3a%2f%2flocalhost%2fproject-debug%2fproject.html";</script>

我把它放在一个 XML 验证器中,然后它吐了出来:

此页面包含以下内容 错误:第 1 行第 16 列的错误: EntityRef:期待';'

关于缺少 ';' 的任何想法应该去?还有问题吗?

【问题讨论】:

    标签: xml validation xml-validation character-reference


    【解决方案1】:

    您的网址中有未转义的 & 符号 &amp;amp;。它们要么需要 (a) 更改为字符实体 (&amp;amp;),要么 (b) 包含在 CDATA 部分中。

    CDATA 部分可让您保留 &amp;amp; 等特殊字符不转义,这样最简单:

    <script type="text/javascript">
    // <![CDATA[
        document.getElementById(...).src="...";
    // ]]>
    </script>
    

    除了确切的字符序列]]&gt; 之外,您可以在 CDATA 部分中包含任何您想要的内容。 // cmets 用于确保不理解 CDATA 部分的浏览器忽略 &lt;![CDATA[]]&gt; 标记。

    顺便说一句,JavaScript 是区分大小写的。那应该是getElementById 而不是getelementbyid

    【讨论】:

      【解决方案2】:

      修改内容并非总是可行的,例如,如果您正在抓取网站。

      你不能只用 '&' 替换 str_replace '&'因为 html 可能包含有效的 html 实体,你会得到类似 "&amp;"

      这是一个正则表达式,它应该用 htmlentiries 替换 & 符号,而不破坏好的 htmlentities:

      $html = preg_replace("|&([^;]+?)[\s<&]|","&amp;$1 ",$html);
      

      我用它刮了大约 700 页没有任何问题:)

      【讨论】:

        猜你喜欢
        • 2014-06-18
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        • 1970-01-01
        • 1970-01-01
        • 2012-08-19
        • 2013-06-03
        相关资源
        最近更新 更多