[php]strip_tags()関数なら正規表現を書かなくてもHTMLタグを除去できる
PHPでブログで紹介するためのプログラムを書いていたのですが、文字列の中から<img>以外のすべてのタグを取り除く必要がでてきて、preg_replace()にどういうパターンの正規表現をつっこめばいいんだろうと悩んでいました。
HTMLのタグをすべて取り除くのはなんとなくかけたのですが、特定のタグを残すとなると、書き方がちょっとわかりませんでした。おまけに<img>タグは閉じないタグなので、ますますわかりません。
「正規表現 タグ 除去 php」でグーグル先生に尋ねたところ、So-net blog:インターネット・ダイアリー:HTML タグを PHP 関数で除去するというブログの記事を見つけて、strip_tags()関数に出会いました。
strip_tags()関数は、文字列からHTMLタグやHTMLコメント、PHPタグを取り除く関数です。引数を追加することで、取り除かないタグを指定することができます。
まさにこの関数を求めていたのですよ。マニュアルの下のほうには注意書きとして
- strip_tags() は HTML の検証を行わないため、 不完全または壊れたタグにより予想以上に多くのテキスト/データが削除される可能性があります。
- この関数は、allowable_tags で許可した全てのタグの属性を修正しません。 これには、style および onmouseover属性が含まれており、 悪意のあるユーザが他のユーザに見せるようなテキストを投稿する際に危険な行為を行う可能性があります。
と書いてありますが、私が今書いているプログラムはブログ用なので、そこまで厳しくなくてもいいかなっと。とりあえず、phpの関数の多さに改めて敬服。
配列でも文字列でも受け取るstrip_tags()関数のラッパーを作ってみたのでどうぞ。
-
/**
-
* 配列でも文字列でもstrip_tags
-
*
-
* @author uechoco
-
* @param string|array
-
* @return string
-
*/
-
function stripTags($data, $allowable_tags = '<>')
-
{
-
return $data;
-
}
-
foreach ($data as $k => $v) {
-
}
-
return $result;
-
} else {
-
}
-
}
■追記(2007/12/19 12:00)
この関数に至るまでにグーグル先生がいいサイトを教えてくれたので、追記しておこうかと思います。
Supprimer les tags html dans un texte (StripHTML) snippets pour c# 1.x, c# 2.x, coldfusion mx, java, javascript, php 3, php 4, php 5, vb 2005, vb.net 1.x, vb6, vba, vbscript
http://www.codyx.org/snippet_supprimer-tags-html-dans-texte-striphtml_12.aspx#28
単純にすべてのタグを取り除くという処理をさまざまな言語で書いてみたというページです。C#、Java、Javascript、php、VB 2005、VB.NET、VB6、VBA、VBScriptと種類がたくさんあります。