Как запретить HTML в комментариях

Ярые борцы со спамом одной из причин появления спама в комментариях считают возможность использования разметки HTML. Если присутствует возможность вставить ссылку с ключевыми словами, анкорами, тайтлами, то спамеры незамедлительно этим начинают пользоваться. Более того, существует такое явление, как ручной спам — это когда по всему миру нанимается толпа людей, которые за копейки оставляют как бы человеческие комментарии в популярных блогах, снабжая их полноценными ссылками. Если комментарии открыты для индексирования, то такие ссылки почти находятся поисковиками. Бороться с ручным спамом сложно, особенно на посещаемых сайтах — нужно лично знакомиться с содержанием всех комментариев, сопоставлять их по смыслу с тем материалом, в которому они относятся, проверять указанные в них ссылки, и на основе всех этих данных уже делать вывод о том, является ли такой комментарий обычным или же это хитро замаскированный ручной спам. Поэтому борцы первым делом советуют убрать возможность использования разметки HTML в комментариях, а иногда и вовсе поступить радикально, убрав возможность вообще оставлять ссылки.

По поводу эффективности последнего ничего утверждать не буду, равно как и по поводу самой разметки HTML. Однако скажу, что иногда отсутствие HTML в комментариях может быть полезным не только для борьбы со спамом. Например, у вас есть блог, в котором часто оставляют комментарии, в которых приводятся примеры программного кода. Если присутствует HTML, то в комментариях написать программный код становится практически нереально — он преображается в исполняемый. Вместо table появляется таблица, а код php-функций вообще не отображается. Более того, есть риск, что кто-то хитрый, воспользовавшись какой-либо незакрытой уязвимостью, оставит в комментариях вредоносный код. В общем, если вам нужно запретить HTML в комментариях, то можно воспользоваться способом, который я часто практикую.

Откройте файл functions.php и добавьте в него такой код:

//html в комментариях start
function plc_comment_post( $incoming_comment ) {
	$incoming_comment['comment_content'] = htmlspecialchars($incoming_comment['comment_content']);
	$incoming_comment['comment_content'] = str_replace( "'", ''', $incoming_comment['comment_content'] );
	return( $incoming_comment );
}

function plc_comment_display( $comment_to_display ) {
	$comment_to_display = str_replace( ''', "'", $comment_to_display );
	return $comment_to_display;
}

add_filter( 'preprocess_comment', 'plc_comment_post', '', 1);
add_filter( 'comment_text', 'plc_comment_display', '', 1);
add_filter( 'comment_text_rss', 'plc_comment_display', '', 1);
add_filter( 'comment_excerpt', 'plc_comment_display', '', 1);
//html в комментариях end

Этот код запретит использование HTML. Результатом его работы будет то, что если вы напишите программный код, то в комментариях появится именно текст программного кода. А как же оставлять ссылки? — скажете вы — ведь это же необходимо! Самое удобное в том, что возможность оставить ссылки остается — нужно просто указать ссылку ( например: http://tiaurus.info ), и она станет активной. Однако если вы напишите код ссылки

<a href="http://tiaurus.info">tiaurus.info</a>

то этот код так и останется текстом, преобразование в ссылку не произойдет.