Pergunta

Olá, eu tenho algum XML que não valida. Eu reduzi o problema a este bit:

<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>

Eu o coloquei em um validador XML e ele cuspiu:

Esta página contém os seguintes erros: Erro na linha 1 na coluna 16: EntityRef: Esperando ';'

Qualquer idéia sobre onde a falta ';' deveria ir? Existe outro problema?

Foi útil?

Solução

Você tem amperas e sem desconstruir & em seu URL. Eles precisam ser (a) alterados para entidades de personagem (&amp;), ou (b) fechado em uma seção CDATA.

Uma seção CDATA permite deixar personagens especiais como & UNESCAPADO, então isso seria mais fácil:

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

Você pode incluir o que quiser dentro de uma seção CDATA, além da sequência exata do personagem ]]>. o // existem comentários para garantir que os navegadores que não entendam seções de CDATA ignoram o <![CDATA[ e ]]> marcadores.

A propósito, o JavaScript é sensível ao minúsculo. Isso deveria ser getElementById não getelementbyid.

Outras dicas

Modificar o conteúdo nem sempre é possível, por exemplo, se você estiver raspando um site.

Você não pode simplesmente str_preplace '&' com '&' porque o HTML pode incluir entidades HTML válidas, e você obteria algo como "& amp;"

Aqui está um regex que deve substituir os ampeiros e por htmlentiries por amperands, sem quebrar boas htmlentities:

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

Eu usei para raspar cerca de 700 páginas sem problemas :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top