2012-01-03 5 views
1

htmlタグをそのままにして、すべてのhtml特殊文字(ほとんど&、<)を削除する正規表現を見つけようとしています。RegEx:HTMLタグを保持し、html specialcharsのみを削除する

私はこれらの情報をデータベースから取得していますので、<と>などの文字が& gtに置き換えられていることを確認できません。および& lt;

私はPHPで、次の正規表現で&と<それを交換するために管理することができます:

$Value = preg_replace('/<(?!#?\/?[a-zA-Z0-9]+>)/','',$Value); 
$Value = preg_replace('/&(?!#?[a-zA-Z0-9]+;)/','&amp;',$Value); 

私は、ルックアップビハインドを使用する必要があると思いますので、私は、>タグを修正するために、今だけの悩みを持って、どの固定長以外のRegExは使用できません。

$Value = preg_replace('/(?<!<[a-zA-Z0-9]+)>/','',$Value); 

挨拶 -Thomas

+3

ああ、もう一度やめてください。 – zerkms

+2

http://php.net/manual/en/function.htmlspecialchars.phpが助けてください。 – lfxgroove

+0

htmlspecialcharsもタグを置き換えます。 –

答えて

3

DOM Parserを使用し、テキストのみのノードに自分の置換を適用します。

$partialId = uniqid(); 
$dom = new DOMDocument; 
$dom->loadHTML(sprintf('<div id="%s">%s</div>', $partialId, $html)); 
echo $dom->saveHtml($dom->getElementById($partialId)); 

ちょうど部分を解析することは、すでにそれぞれのエンティティにXML特殊文字になります:あなたはPHPにない場合

<div id="4f02efa1a4e9b">this is my fancy <i>text</i> I love my text lalalal &gt; wow I'm great"</div> 

を使用すると、ノードでsaveHTMLを使用することはできません5.3.6。回避策については、How to get innerHTML of DOMNode?およびHow to return outer html of DOMDocument?を参照してください。

テキスト・ノード上で動作する必要がある場合は、あなたが

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//text()') as $textNode) { 
    $textNode->nodeValue = doSomething($textNode->nodeValue); 
} 

また、DOMがどのように動作するかの概要についてDOMDocument in phpを確認を行うことができます。

+0

DOMパーサーは有効なhtmlが必要ですか?私は通常、次のようなテキストを取得しています: "これは私のファンシーですテキスト私のテキストlalalalが大好きです>うわー私は素晴らしい" –

+3

DOMDocument :: loadHTMLは部分的なHTMLを読み込むことができます。これにより必要なHTML骨格(html、head、body)が追加され、PHP <5.3.6のDOMDocumentから部分的に体を取り出すために体操をする必要がありますが、それは確実に機能します。あなたはこれを個々の側面を尋ねるので、問題に遭遇したときに検索するように、2,3の質問があります。 – Gordon

関連する問題