Незакрытые теги, валидация HTML и высокие нагрузки.

В друпал по умолчанию ни одним модулем не чистятся теги в комментариях, которые вводит пользователь В итоге люди хранят у себя в базе дряной некорректный HTML, а для его вывода пользуют некий веселый модуль htmlcorrector. Все бы хорошо, но принцип этого модуля в том что он отрабатывает не при ВВОДЕ данных, а при их ВЫВОДЕ. В итоге он проходит по каждому комментароию, каждой странице и закрывает, ну или пытается закрыть теги. А что если пользователей будет много? Сервак сложится домиком из-за чрезмерного расхода CPU? :) Наверное лучше держать в базе данные в КОРРЕКТНОМ виде. И отдавать их не фильтруя усиленно, как есть. Для своих нужд я решил эту проблему достаточно просто.. Задействовал плагин safehtml. Но вот незадача. Он быстрый, красивый. Но... Делает балансировку HTMLна всем что имеет тип node :) А комментарии к этому типу не относятся. Вот мой маленький хук ко всему этому делу.
function safehtml_comment(&$a1, $op){
    witch($op){
        case 'update':
        case 'insert':
             $arr = array_keys(filter_list_format($a1['format'] ) );
             if($c = db_fetch_object(db_query('SELECT cid, comment, format FROM {comments} WHERE cid=%d', $a1['cid'] ) ) ){
                 if (in_array('safehtml/0', $arr) ) {
                     if (!defined('XML_HTMLSAX3')) {
                         define('XML_HTMLSAX3', '');
                     }
                     require_once('classes/safehtml.php');
                    $c->comment = _safehtml_parse($c->comment, $comment->format);
                    db_query('UPDATE {comments} SET comment=\'%s\' WHERE cid=%d', $c->comment, $c->cid);
                }
             }
     }
}

Комментарии

Submitted by Bethrezen on

В таких случаях лучше всего было бы тебе написать статью на двух языках сразу. Мало ли кому ещё пригодится.
+1