/ / Usando DOMDocument para analizar HTML con código JS - php, html-parsing

Uso de DOMDocument para analizar HTML con código JS - php, html-parsing

Tomo HTML como una cadena y luego lo analizo para cambiar todos los enlaces href a otra cosa. Sin embargo, esto funciona cuando la página HTML tiene algunas etiquetas de script JS, es decir, <script> se elimina! Por ejemplo esta línea:

<script type="text/javascript" src="/js/jquery.js"></script>

Se cambia a:

[removed][removed]

Sin embargo, me gustaría tenerlo todo. Esta es mi función:

function parse_html_code($code, $code_id){

libxml_use_internal_errors(true);

$xml = new DOMDocument();

$xml->loadHTML($code);

foreach($xml->getElementsByTagName("a") as $link) {

$link->setAttribute("href", CLK_BASE."clk.php?i=$code_id&j=" . $link->getAttribute("href"));

}

return $xml->saveHTML();

}

Agradezco cualquier ayuda en esto.

Respuestas

2 para la respuesta № 1

CodeIgniter "s bogus anti-XSS‘ características ’está gestionandola entrada de su script antes de que DOMDocument lo vea. Las etiquetas de script y varias otras cadenas se eliminarán, se reemplazarán por "[eliminado]", de otro modo, sin ningún motivo. Vea el sistema /raries / Security.php Módulo para los detalles más embarazosos.

Para desactivar esta característica equivocada, configure $config["global_xss_filtering"]= FALSE. Tendrás que asegurarte de que tu script seapor supuesto, en realidad el manejo de cadenas que se escapan correctamente (por ejemplo, siempre la entrada de usuarios que escapan a HTML cuando se incluye en una página). Pero entonces tienes que hacer eso de todos modos; anti-XSS no soluciona los problemas de procesamiento de texto, solo los oculta.

$link->setAttribute("href", CLK_BASE."clk.php?i=$code_id&j=" . $link->getAttribute("href"));

Necesitarás urlencode ese getAttribute("href") (y potencialmente $ code_id si no es solo numérico o algo así).