2011-01-29 2 views

答えて

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がhtmlspecialchars()が(それは正気だろう-edすることができるテキスト、本当に)。それから、あなたはそのアプローチに幸運を覚悟しています。代わりに<br />ノードを挿入する方法を見つける必要があります。
  2. あなたが望むコントロールを与えるプロセスが遅すぎるかもしれません。テキストノードのテンプレートを(言い換えれば)変更しますが、実際のHTML定義では既にHTMLPurifier_AttrDef_Textインスタンスを使用している可能性があります。

これが役立つかどうかを確認してください。

また、HTML Purifierフォーラムにスレッドがあります(起動しましたか?私は驚くことはありません) - nl2br, auto <br /> insertion。解決策を見つけたら、そこで回答を投稿することができます。

関連する問題