验证失败:“ EntityRef:期望';'”
-
26-09-2019 - |
题
嗨,我有一些无法验证的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验证器中,然后吐出来:
此页面包含以下错误:第16列第1行上的错误:EntityRef:期望';'
关于失踪的地方的任何想法;应该去吗?还有另一个问题吗?
解决方案
您有未播放的ampersands &
在您的网址中。他们要么需要(a)更改为角色实体(&
),或(b)封闭在CDATA部分中。
CDATA部分让您留下特殊角色 &
毫无疑问,这是最简单的:
<script type="text/javascript">
// <![CDATA[
document.getElementById(...).src="...";
// ]]>
</script>
除了确切的字符序列外,您还可以在CDATA部分内包含任何所需的内容 ]]>
. 。这 //
有评论以确保不了解CDATA部分的浏览器忽略 <![CDATA[
和 ]]>
标记。
顺便说一句,JavaScript对案例敏感。那应该是 getElementById
不是 getelementbyid
.
其他提示
修改内容并非总是可能的,例如,如果您要刮口网站。
您不能仅仅使用'&'&',因为HTML可能包含有效的HTML实体,并且您会得到类似“&amp;”的东西。
这是一个正则应替换htmlenties for Ampersands的响应,而不会破坏良好的htmlentities:
$html = preg_replace("|&([^;]+?)[\s<&]|","&$1 ",$html);
我用它刮擦了约700页,没有任何问题:)
不隶属于 StackOverflow