2012-02-12 12 views
3

文字列の先頭と末尾にタグを付けないで文字列を取得する必要があります。私はstrip_tagsを知っていますが、あなたが知っているように、すべてのタグを削除します。例:PHPで文字列の先頭と末尾からタグを削除します

<span class="note"> 
    <span></span>This is my text <strong>Hello world</strong> 
</span> 

この例では、<strong>タグを保持します。タグが異なる可能性があるため、私は無条件の解決策が必要であることを知っておくことが重要です。私は既にあなたがstrip_tagsでタグを除外できることを知っています(これは私が知りたいものではありません)が、そうではありません。

誰かがこれに対して高速な解決法を知っていますか?たとえば、reg式の置き換えや何か(私がうまくいかないもの)です。ネット上でそのようなものを見つけることができないので、私はここでそれを尋ねます。

ありがとうございます。

答えて

3

DOMDocumentこのために便利だろう...

$dom = new DOMDocument; 

$dom->loadHTML($html); 

$html = ''; 

foreach($dom->getElementsByTagName('body')->item(0)->firstChild->childNodes as $node) { 
    $html .= trim($dom->saveHTML($node)); 
} 

echo $html; 

CodePad。あなたは、あなたが使用できる正規表現を使用する方法についてunswayableた場合

...

$html = preg_replace('/^\s*<[^>]+>\s*|\s*<\/[^>]+>\s*\z/', '', $html); 

CodePad

アトリビュートが>のHTMLタグでは正規表現に失敗することに注意してください。だから、私はDOMDocumentソリューションを好むだろう。

これらの両方のソリューションは、先頭と末尾の空白文字のテキストノードを削除します。それが望ましくない場合は、最初の例のtrim()と2番目の例の\s*を削除してください。

+0

お返事ありがとうございました。ドキュメントが既にロードされているため、DOMDocumentを2回(メモリ)ロードしたくないかもしれませんが、スニペットを解析するために使用できます。また、reg式は、空タグ(たとえば)をその前に追加する場合を除いて、正常に動作しています。属性に '>'が含まれているときに機能しないことは問題ではなく、不正なコーディング方法です。しかし、空のスパンも削除されるように変更することはできますか?どうもありがとうございます! – Codebeat

+0

'/^\ s * <[^>] +> \ s * | \ s * <\/[^> +> \ s * \ z /'を '/^\ s * 'に変更してみてください。<[^>] <\/[^>] +> \ s * \ z/'あなたは望みの結果を得られるでしょうか? :) – tftd

+0

いいえ、同じ結果が得られますか? – Codebeat

0

私は、DOMクラスを呼び出すのではなく、単純な関数を使用します。
これは私が通常行っていることです。http://codepad.viper-7.com/RVKmAG

+0

ありがとう、しかし、私が望むものではない、var_dumpはまったくタグがないのでstrip_tagsと同じように思える。 – Codebeat

関連する問題