Pregunta

Hola, tengo un XML que no validará. He reducido el 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>

Lo puse en un validador XML y se escapa:

Esta página contiene los siguientes errores: Error en la línea 1 en la columna 16: EntityRef: Esperando ';'

Cualquier idea sobre dónde los faltantes ';' se supone que debe irse? ¿Hay otro problema?

¿Fue útil?

Solución

Tienes amperands sin nave & en tu url. O necesitan ser (a) cambiados a entidades de personaje (&amp;), o (b) encerrado en una sección CDATA.

Una sección de Cdata te permite dejar caracteres especiales como & sin ascender, así que sería más fácil:

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

Puede incluir todo lo que desee dentro de una sección de Cdata aparte de la secuencia de caracteres exacta ]]>. los // Los comentarios están ahí para asegurarse de que los navegadores que no entiendan las secciones de CDATA ignoran el <![CDATA[ y ]]> marcadores.

Por cierto, JavaScript es sensible a los casos. Eso debería ser getElementById no getelementbyid.

Otros consejos

Modificar el contenido no siempre es posible, por ejemplo, si está raspando un sitio web.

No puede simplemente str_replace '&' con '&' porque el HTML podría incluir entidades HTML válidas, y obtendrá algo como "& amp;"

Aquí hay un Regex que debería reemplazar los ampersands con htmlentiries para ampersands, sin romper buenas htmlentidades:

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

Lo usé para raspar alrededor de 700 páginas sin ningún problema :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top