コメントのHTMLを無効にする

デフォルトのWordPressはコメントに一部のhtmlタグの利用が許可されています。
許可されていないタグについては無効化されるようになっていますが、許可されたタグの閉じ忘れの補完まではしてくれません。
なので、</div>とか書かれてしまうと困ったことになってしまいます。

なので、いっそのことhmtlは許可しなければいいじゃん!ということで、カスタマイズを行いました。
今回もfunction.php に以下のコードをコピペしてもらえばOKです。
htmlを取り除くのではなく、コメントの表示時にhtmlspecialchars()を利用して無効化しています。

function webspaceblog_comment_display( $comment_content) {
	if ( get_comment_type() == 'comment' ) {
		$comment_content = htmlspecialchars($comment_content, ENT_QUOTES);
	}
	return $comment_content;
}
add_filter( 'comment_text',     'webspaceblog_comment_display', '', 1);
add_filter( 'comment_text_rss', 'webspaceblog_comment_display', '', 1);
add_filter( 'comment_excerpt',  'webspaceblog_comment_display', '', 1);

コメントのhtmlの無効化を行うタイミングとしては2パターン考えられました。

  1. コメント投稿時に無効化を行う
  2. コメント表示時に無効化を行う

今回は2番目のコメントの表示時に無効化をする方法を選択しました。
これは、無効化した後に再度有効化をする可能性がゼロではないため、投稿時はデフォルトの処理のみを行うようにしています。
(負荷的には投稿時のほうがいいのかもしれませんが。。)

コメント中のURL, e-mailへの自動リンクは有効のままになっています。
この自動リンクも無効にしたい場合はさらに以下の1行を追加してください。

remove_filter( 'comment_text', 'make_clickable');

ちなみにトラックバック / ピンバックの場合は無効化をしないよう(2行目の条件式)で制御しています。
これは、もともとトラックバックの本文部分には<strong>タグ内にトラックバック元のページのタイトルが入り、そのあとに続いて該当エントリの要約がタグを取り除かれた状態で入っています。
そのため、トラックバックに対してもhtmlの無効化をしてしまうと以下のように出力されてしまうのを防ぐためです。

&lt;strong&gt;コメントのHTMLを無効にする | WebSpaceBlog&lt;/strong&gt;
デフォルトのWordPressはコメントに一部のhtmlタグの利用が許可されています。 許可されていないタグについては [...]

こんなエントリーも書いてます

  • 関連するエントリーを集計しています
このエントリーの Twitter からのトラックバックを取得中 loading
このエントリーのはてなブックマークを取得中 loading

コメント

コメントフォーム




トラックバック

トラックバックURI

http://blog.webspace.jp/deny-html-in-comment/trackback/
  1. [...] コメントのHTMLを無効にする | WebSpaceBlog [...]

    2012/04/11 (水) 12:45

▲page top