2010-08-07 25 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

URL에 이스케이프 처리되지 않은 앰퍼샌드 &이 있습니다. 그것들은 (a) 문자 엔티티 (&amp;)로 변경되거나 (b) CDATA 섹션으로 묶여 야합니다.

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

당신은 정확한 문자 순서 ]]> 제외하고 CDATA 섹션 안에 원하는 모든 것을 포함 할 수 있습니다 : 그 가장 쉬운 것, 그래서

CDATA 섹션, 당신은 & 이스케이프와 같은 특수 문자를 떠날 수 있습니다. // 주석은 CDATA 섹션을 이해하지 못하는 브라우저가 <![CDATA[]]> 마커를 무시하도록합니다.

그런데 JavaScript는 대소 문자를 구분합니다. 이 값은 getElementById이 아니고 getelementbyid이되어야합니다.

1

내용을 수정하는 것이 항상 가능한 것은 아닙니다 (예 : 웹 사이트를 고칠 때).

'& amp;'으로 '&'을 str_replace 할 수는 없습니다. html에 유효한 html 요소가 포함될 수 있으며 "& amp; amp;" 여기

좋은를 htmlentities 파괴하지 않고, 앰퍼샌드에 대한 htmlentiries와 앰퍼샌드를 교체해야합니다 정규식입니다 : 아무 문제없이

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

내가 약 700 페이지를 긁어 그것을 사용을 :)