嗨,我有一些无法验证的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)更改为角色实体(&amp;),或(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<&]|","&amp;$1 ",$html);

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top