2010-08-07 193 views
10

嗨,我已經有了一些不會驗證的XML。我已經縮小的問題,該位:驗證失敗:「EntityRef:expecting';'」

<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:期待';'

關於在哪裏丟失';'應該去?還有其他問題嗎?

回答

25

您的網址中有非轉義的&符號&。它們需要(a)更改爲字符實體(&amp;),或者(b)包含在CDATA部分中。

CDATA項可讓您留下特殊的字符,如&轉義,這樣會是最簡單的:

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

您可以包括你確切的字符序列]]>想要一個CDATA段內預留東西。 //註釋用於確保不理解CDATA部分的瀏覽器忽略<![CDATA[]]>標記。

順便說一下,JavaScript區分大小寫。那應該是getElementById而不是getelementbyid

1

修改內容並不總是可能的,例如,如果你在刮網站。

你不能只是str_replace'&'與'& amp;'因爲html可能包含有效的html實體,你會得到類似「& amp; amp;」的內容

這裏應該有htmlentiries爲&符號代替&號正則表達式,而不會破壞良好ヶ輛:

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

我用它來刮約700頁,沒有任何問題:)