2017-01-05 3 views
0

아래 코드에서 htmlpurifier를 사용하여 전체 내용을 전달하는 방법은 무엇입니까? 전체 HTML 문서를 허용하고 싶지만 HTML, 머리, 스타일, 제목, 본문 및 메타가 제거됩니다.htmlpurifier를 사용하여 html, head, title, body를 포함하여 전체 문서가 전달되도록하는 방법

나는 심지어 $config->set('Core.ConvertDocumentToFragment', false)을 시도했지만 작동하지 않았습니다.

시작 위치에 대한 도움을 주시면 매우 감사하겠습니다.

여기서 예제를 시도했지만 HTML Purifier - Change default allowed HTML tags configuration하지만 작동하지 않습니다. 태그가 허용되지 않는 예외가 계속 발생합니다. 참고 : 위의 모든 태그를 HTML.Allowed에 추가했지만 아무것도 작동하지 않는 것 같습니다. 그 의도 된 사용 사례이기 때문에 기본적으로

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" /> 
    <title>Hello World - Email Template</title> 
    <style type="text/css"> 
    @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600); 
    body{-webkit-text-size-adjust: none;-ms-text-size-adjust: none;margin: 0;padding: 0;} 
    </style> 
    <body> 
    <h1>Hi there</h1> 
    </body> 
    </html> 

답변

0

HTML 정수기 만하는 <body> 컨텍스트 내에서 유효한 태그를 알고있다. 기본적으로 실제로는 <meta>, <html>, <head> 또는 <title> 태그가 무엇인지 알지 못합니다. 대부분의 보안은 HTML의 의미 론적 토대를 이해하는 데 의존하기 때문에 큰 문제입니다! ,

...하지만 약간의 숙고 후 그래서 그들은 현재 매우 유용한 답변을하지 않습니다

이 주제에 대한 몇 가지 유래 오래된 질문이 있습니다 나는 당신의 질문에 여전히 장점이 있으며 여기에 대답 할 것이라고 생각합니다.

일반적으로 이것은 HTML 정수기 포럼 (예 : Allow HTML, HEAD, STYLE and BODY tags)에서 몇 번 논의되었습니다.하지만 간단히 말해서 중요한 작업 없이는이 작업을 수행 할 수 없다는 것이고, 불행히도 저는 현재 익숙하지 않습니다 간단한 복사 및 붙여 넣기로이 문제를 해결하는 코드 스 니펫이 있습니다.

그래서 HTML Purifier의 내장을 파헤쳐 야합니다.

the instructions on the Customize! documentation page을 사용하여 HTML 정수기에 대한 대부분의 태그 및 관련 동작을 학습 할 수 있습니다. 가장 흥미로운 부분은 하단에있을 것이고, <form>은 HTML Purifier에게 가르쳐줍니다. 일부 후손을 위해 거기에서 인용 : 매개 변수의

$config = HTMLPurifier_Config::createDefault(); 
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial'); 
$config->set('HTML.DefinitionRev', 1); 
$config->set('Cache.DefinitionImpl', null); // remove this later! 
$def = $config->getHTMLDefinition(true); 
$def->addAttribute('a', 'target', new HTMLPurifier_AttrDef_Enum(
    array('_blank','_self','_target','_top') 
)); 
$form = $def->addElement(
    'form', // name 
    'Block', // content set 
    'Flow', // allowed children 
    'Common', // attribute collection 
    array(// attributes 
    'action*' => 'URI', 
    'method' => 'Enum#get|post', 
    'name' => 'ID' 
) 
); 
$form->excludes = array('form' => true); 

각 우리가 묻는 질문 중 하나에 해당합니다. 조치 속성의 끝에 별표를 추가했음을 나타내는 이 필요하다는 것을 표시합니다. 누군가 속성이없는 양식을 지정하면 태그가 axed됩니다. 또한 끝에있는 여분의 행은 내에서 양식이 중첩되지 않도록 특별한 추가 선언입니다.

당신은 당신이 (<html>까지 모든 방법)을 지원하려는 <body> 태그 이외의 모든 태그와 비슷한 일을해야합니다.

참고 : 이러한 태그를 HTML 정수기에 모두 추가하더라도 발견 한 설정 Core.ConvertDocumentToFragmentfalse으로 설정해야합니다.

대체

이 너무 많은 작업처럼 보인다, 당신은 별도로 조각을 살균, 헤더 섹션과 문서의 신체 특성, 당신은 또한 조각으로 문서를 줄일 수 other ways to sanitise있는 경우, 조심스럽게 스틱 다시 함께.

(물론 전체 문서에 대해 대안을 사용하십시오.)

관련 문제