您好我有一些不会验证的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:期待';'
关于遗失';'的任何想法应该去?还有其他问题吗?
答案 0 :(得分:26)
您的网址中有未转义的&符号&
。它们要么需要(a)更改为字符实体(&
),要么(b)包含在CDATA部分中。
CDATA部分允许您保留&
未转义的特殊字符,以便最简单:
<script type="text/javascript">
// <![CDATA[
document.getElementById(...).src="...";
// ]]>
</script>
除了确切的字符序列]]>
之外,您可以在CDATA部分中包含您想要的任何内容。 //
评论用于确保不理解CDATA部分的浏览器忽略<![CDATA[
和]]>
标记。
顺便说一句,JavaScript区分大小写。那应该是getElementById
而不是getelementbyid
。
答案 1 :(得分:1)
修改内容并非总是可行,例如,如果您正在抓取网站。
你不能只是str_replace'&amp;'与'&amp; amp;'因为html可能包含有效的html实体,你会得到类似“&amp; amp; amp;”的内容。
这是一个正则表达式,应该用&符号替换&符号&符号,而不会破坏良好的性能:
$html = preg_replace("|&([^;]+?)[\s<&]|","&$1 ",$html);
我用它来刮掉大约700页而没有任何问题:)