/ / Używanie DOMDocument do parsowania HTML-a z kodem JS - php, html-parsing

Używanie DOMDocument do parsowania kodu HTML za pomocą kodu JS - php, html-parsing

Biorę HTML jako ciąg, a następnie analizuję go, aby zmienić wszystkie linki href na coś innego. Działa to jednak, gdy strona HTML ma pewne znaczniki skryptu JS, tj. <script> zostaje usunięty! Na przykład ten wiersz:

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

Pobiera zmieniony na:

[removed][removed]

Chciałbym jednak zachować wszystko. To moja funkcja:

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();

}

Doceniam każdą pomoc w tej sprawie.

Odpowiedzi:

2 dla odpowiedzi № 1

Fałszywą „funkcją” CodeIgniter jest „fałszowanie”dane wejściowe skryptu, zanim DOMDocument go obejrzy. Znaczniki skryptu i różne inne ciągi znaków zostaną usunięte, zastąpione przez „[usunięte]” inne w inny sposób pomieszane bez powodu. Zobacz system / libraries / Security.php moduł pełnych krępujących szczegółów.

Aby wyłączyć tę błędną funkcję, ustaw $config["global_xss_filtering"]= FALSE. Musisz upewnić się, że twój skrypt jestoczywiście właściwie obsługuje łańcuchy ucieczki, oczywiście (np. zawsze wprowadzanie przez użytkownika znaków ucieczki HTML podczas dołączania do strony). Ale i tak musisz to zrobić; anti-XSS nie rozwiązuje problemów z przetwarzaniem tekstu, po prostu je zasłania.

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

Będziesz musiał urlencode który getAttribute("href") (i potencjalnie $ code_id, jeśli nie jest to tylko liczba lub coś takiego).