Xml 验证失败:";EntityRef:预期为''&引用;

Xml 验证失败:";EntityRef:预期为''&引用;,xml,validation,xml-validation,character-reference,Xml,Validation,Xml Validation,Character Reference,嗨,我有一些无法验证的XML。我已经把问题缩小到这一点: <script type="text/javascript">document.getelementbyid("oxm-1f4a4485-5a1d-45f9-a989-9c65a0b9ceb6").src="http://bid.website.net/display?l=h4siaaaaaaaaad2nmq6cqbrenycw7qjyolfccxmregvcoae0u0sly_agtvaewwn4bg_havwbnebpvm

嗨,我有一些无法验证的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>
document.getelementbyid(“oxm-1f4a4485-5a1d-45f9-a989-9c65a0b9ceb6”).src="http://bid.website.net/display?l=h4siaaaaaaaaad2nmq6cqbrenycw7qjyolfccxmregvcoae0u0sly_agtvaewwn4bg_havwbnebpvmzkkzra_kzzdvoloq4u-HJNP7SII0RXCBZZ5VL5KXSRDS6WTSFBxMCR9ChysuhqBeCuKb8CVX4M-PBCxUgtdrl6D3DqTiHnquiktH2YVDKptR67CuzfLxJLinkul9634Lpal_H4mWHSO8AABzHw1CWJxl6XIV8AgrJxJC(gaaaa=&p=H4SiaaaaaaaAABKmq7CmaxArcJrSqRqRqRm7X3FSrWyVosda8Qnj_3OJFGB49O45PBLQ7E80SYZJHOPGSO9WYZPCPNTZKXK1LDTBBI7OTMXFJ9DA1WPJCF10VTXDJ9E5_utyj19k2lfssepld5agnqaaaa=&url=http%3a%2f%2f本地主机%2f项目调试%2fproject.html”;
我将其放入XML验证器,然后它吐出:

本页包含以下内容 错误:第16列第1行的错误: EntityRef:应为“;”


关于丢失的“;”应该放在哪里有什么想法吗?还有其他问题吗?

您的URL中有未替换的符号和符号。它们需要(a)更改为字符实体(
&;
),或者(b)包含在CDATA区域中

CDATA部分允许您保留一些特殊字符,如
&
未被替换,因此这是最简单的:

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

// 
除了确切的字符序列
]>
之外,您还可以在CDATA区域中包含任何您想要的内容。
/
注释用于确保不理解CDATA区域的浏览器忽略
]>
标记


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

修改内容并不总是可能的,例如,如果你正在抓取一个网站

您不能简单地用“&;”替换“&”,因为html可能包含有效的html实体,您会得到类似“&;amp;"

这里有一个正则表达式,它应该用用于Ampersand的HtmlEntries替换Ampersand,而不会破坏良好的HtmlEntries:

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