PHPで aタグ以外をサニタイズする方法
フォームの値を受け取るときやスクレイピングなどで「<a></a>以外のタグを消し去りたい」って事がありますよね。 それをスマートに解決する方法があるんです、そう、PHPならね。
php > $str = '<div><a href="hoge">hage</a></div>'; php > echo strip_tags($str,'<a>'); <a href="hoge">hage</a>
とまぁ、こんな感じで、strip_tags()
のひとつ目の引数にHTMLのコードを、
ふたつ目の引数に残したいタグを渡せば、指定したタグ以外を取り払ってくれます。
aタグ以外を htmlspecialchars() したい場合
上記のようにタグを取り払うのではなく、<a>タグ以外の特殊文字をhtmlエンティティに変換したい場合はどうしたら良いか。
そういう動作をする組み込み関数は(恐らく)無いので、自分で実装してみました。
(作ってから思ったのですが、そのような需要は無いかもしれない・・・)
↓↓作ったものはコチラ↓↓
https://gist.github.com/oh-sky/5464877
処理の内容としては、先ず aタグも含めてhtmlエンティティに変換してしまって、そのあとaタグを元に戻すといった事をします。 よかったら使ってください。