[php]strip_tags()関数なら正規表現を書かなくてもHTMLタグを除去できる

カテゴリ: php / author: uechoco / 2007年12月19日 00:40:29
この記事を読む時間:425くらい

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()関数のラッパーを作ってみたのでどうぞ。

PHP:
  1. /**
  2.  * 配列でも文字列でもstrip_tags
  3.  *
  4.  * @author  uechoco
  5.  * @param   string|array
  6.  * @return  string
  7.  */
  8. function stripTags($data, $allowable_tags = '<>')
  9. {
  10.     if (is_array($data)) {
  11.         if (count($data) == 0) {
  12.             return $data;
  13.         }
  14.         $result = array();
  15.         foreach ($data as $k => $v) {
  16.             $result[$k] = strip_tags($v, $allowable_tags);
  17.         }
  18.         return $result;
  19.     } else {
  20.         return strip_tags($data, $allowable_tags);
  21.     }
  22. }

■追記(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と種類がたくさんあります。


コメントはまだありません »

コメントはまだありません。

この投稿へのコメントの RSS フィード。 TrackBack URI

コメントする

Copyright © 2012 うえちょこ@ぼろぐ. WP Theme created by Web Top.