2014-04-28 2 views
1

다른 사람이이 문제를 발견하고 해결 방법을 찾았 으면합니다.QueryPath가 스크립트 태그에서 HTML 문자열을 끊습니다.

QueryPath의 htmlqp() 메서드를 사용하여 웹 페이지를 구문 분석하는 응용 프로그램이 있습니다 (제어 할 수 없음).

내가 겪고있는 문제는 페이지가 인라인 <script> 태그 (일부 javacript가 있음)를 가지고있을 때마다 구문 분석되는데,이 태그에는 QueryPath의 writeHTML() 메소드 시도가 포함되어 있습니다. 줄 바꿈, 닫는 태그 및 다른 말도 안되는 내용을 자바 스크립트에 넣음으로써 HTML을 "고칠"수 있습니다. 이렇게하면 페이지의 모든 자바 스크립트 (경우에 따라 HTML)가 손상됩니다. 예를 들어

: 후자의 휴식 명백히 분명히

<script> 
    var $jQ = jQuery.noConflict(); 
    // Use jQuery via $jQ(...) 
    $jQ(document).ready(function(){ 
     $jQ("#mktFrmSubmit").wrap("<div class='buttonSubmit'></div>"); 
     $jQ(".buttonSubmit").prepend("<span></span>"); 
    }); 
    </script> 

-becomes-

<script> 
    var $jQ = jQuery.noConflict(); 
    // Use jQuery via $jQ(...) 
    $jQ(document).ready(function(){ 
     $jQ("#mktFrmSubmit").wrap("<div class='buttonSubmit'></script> 
</div>"); 
     $jQ(".buttonSubmit").prepend("<span></span>"); 
    }); 

.

누구든지이 작업을 수행하지 못하도록하는 방법을 알고 있습니까? 또는 일반적으로 <script> 태그의 본문에있는 내용을 무시하기 만하면됩니까?

감사합니다.

답변

1

HTML을 구문 분석하기 위해 HTML5-PHP 라이브러리를 사용하는 것이 좋습니다. PHP에 내장 된 구버전의 HTML4.01 파서 (libxml을 통해)는 자바 스크립트와 관련해서는별로 좋지 않습니다. 그러나 최신 HTML5 PHP 라이브러리는 이러한 경우를 처리하도록 제작되었습니다.

여기 도서관 :

https://github.com/Masterminds/html5-php

그리고 매트 곡식 가루는이 두 가지 라이브러리를 사용하여 우수한 소개를 쓴이 아름답게 근무

http://engineeredweb.com/blog/2014/querypath-html5-php/

+0

. 감사! – RavenHursT

+0

인라인 스타일 태그에서 ">"를 인코딩하지 않으려면 어떻게해야할까요? 메뉴에 대한 CSS 선택기 전체에서'>'이 모두 나옵니다. saveHTML()에 보낼 수있는 플래그 또는 무언가가 있습니까? – RavenHursT

관련 문제