2017-01-23 2 views
1

일부 노드를 추가하기 위해 일부 html을 PHP로 구문 분석하려고하지만 DOMDocument-> saveHTML의 출력이 예상대로 작동하지 않습니다. 인코딩 됨. 여기DOMDocument-> saveHTML이 href 속성과 함께 예상대로 작동하지 않습니다.

$html = "<a href='javascript:console.log(\"klk\");'>click here</a>"; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
echo $html . "\n"; 
echo "-----------------\n"; 
echo $doc->saveHTML($doc->getElementsByTagName('a')[0]) . "\n"; 

그리고 출력됩니다 : 당신이 뭔가를 볼 수 있듯이

<a href='javascript:console.log("klk");'>click here</a> 
----------------- 
<a href="javascript:console.log(%22klk%22);">click here</a> 

는 HREF 속성을 잘못

이 잘못된 출력을 확인하기 위해 간단한 코드입니다.

어떻게 해결할 수 있습니까?

테스트/재생 URL : http://ideone.com/TsDhI3

답변

2

따옴표 단일하지들에 의해 구분 된 속성에 대한 값으로 올바른 형식으로 HTML을 작성하려고, 그래서 그들은 인코딩되지 않습니다. Javascript는 작은 따옴표로 구분 된 문자열을 인식합니다. 여기

은 예입니다 :

$html = '<a href="javascript:console.log(\'klk\');">click here</a>'; 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
echo $html . "\n"; 
echo "-----------------\n"; 
echo $doc->saveHTML($doc->getElementsByTagName('a')[0]) . "\n"; 

여기에 작업 버전입니다 - http://ideone.com/DjEyUX

+0

이 그냥 예입니다, 문제는 그 HTML이 소스를 많이에서 온다 내가 할 수없는 보증 방법을 html로 ... – xabi

+1

DOMDocument() 기능은 올바른 HTML 용으로 작성되었습니다. 앱이 깨진 HTML을 제공하는 제어되지 않은 소스로부터 입력을 받으면 유틸리티를 사용하여 입력하기 전에 정리해야합니다.이 라이브러리는 http://htmlpurifier.org/docs 또는 http://php.net입니다. /manual/en/book.tidy.php – motanelu