読者です 読者をやめる 読者になる 読者になる

blogですかい

株式会社Loco Partnersに勤めるエンジニアうちの一人のブログ。仕事、プライベートで学んだことなどを発信し、その内容がたとえ少数でも誰かの役に立ったらなら、それはとっても嬉しいなって

PHPで aタグ以外をサニタイズする方法

PHP

フォームの値を受け取るときやスクレイピングなどで「<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タグを元に戻すといった事をします。 よかったら使ってください。