2011-01-29 155 views

回答

2

我不知道具體細節,但因爲這個問題沒有答案,看看這些指針幫助你:

如果你真的與HTML過濾解決這個設定,你也許能寫一個文本節點轉換,通過編寫一個延伸HTMLPurifier_AttrDef_Text的類來執行nl2brstr_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可能htmlspecialchars() -ed(它會是明智的,真)。那麼你用這種方法運氣不好。相反,您必須找到注入<br />節點的方法。
  2. 這可能是在這個過程中來不及給你你想要的控制 - 改變文本節點「模板」(這麼說),但實際的HTML定義可能已經高高興興地是利用一個HTMLPurifier_AttrDef_Text實例。

看看是否能幫助你呢?

還有對HTML淨化論壇線程(?什麼時候開始它,我也不會感到驚訝) - nl2br, auto <br /> insertion。如果你找到解決方案,你可以在那裏發佈你的答案。