2011-01-29 3 views
1

내가 얻을 수있는 방법에서HTMLPurifier : 자동 BR

<p>first<br>p</p> 
<p>second p</p> 

:

<p>first 
p</p> 
<p>second p</p> 

이 HTMLPurifier를 사용하고 계십니까?

답변

2

나는 세부 사항에 대해 잘 모르겠지만,이 질문에는 대답이 없기 때문에이 포인터가 당신을 도와 주면, 참조 : 당신이 정말 HTML 정수기와 함께이 문제를 해결에 설정하는 경우

하면, 당신은 할 수 있습니다를 HTMLPurifier_AttrDef_Text을 확장하는 클래스를 작성하여 nl2br 또는 str_replace을 수행하는 텍스트 노드 변환을 작성하십시오. 의사 코드 :

class HTMLPurifier_AttrDef_Text_Linebreaks extends HTMLPurifier_AttrDef_Text 
{ 
    public function validate($string, $config, $context) { 
     $string = parent::validate($string, $config, $context); 
     return str_replace("\n", "<br />", $string); 
    } 
} 

은 그럼 당신은 HTML 정수기로 클래스를 주입하는 것 :

$purifier->set('HTML.DefinitionID', 'aNameForYourDefinition'); 
$purifier->set('HTML.DefinitionRev', 1); 
//$purifier->set('Cache.DefinitionImpl', null); 
$htmlDef = $purifier->config->getHTMLDefinition(); 
$htmlDef->manager->attrTypes->set(
    'Text', 
    new HTMLPurifier_AttrDef_Text_Linebreaks() 
); 

주의 사항을 :

  1. AttrDef는 -ed htmlspecialchars()이 (가 제정신 것 일 수있는 텍스트, 정말). 그렇다면 당신은 그 접근법에 운이 없게됩니다. 대신 <br /> 노드를 삽입하는 방법을 찾아야합니다.
  2. 당신이 원하는 컨트롤을 제공하기에는 프로세스가 너무 늦을 수 있습니다. 텍스트 노드의 '템플릿'(말하자면)을 변경하지만 실제 HTML 정의는 이미 HTMLPurifier_AttrDef_Text 인스턴스를 사용하고 있습니다.

그게 도움이되는지 확인해보십시오.

HTML 정수기 포럼에 스레드가 있습니다 (시작 했습니까? 놀랄 일이 아닙니다) - nl2br, auto <br /> insertion. 해결책을 찾으면 거기에 답변을 게시 할 수 있습니다.

관련 문제