Незакрытые теги, валидация 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);
                }
             }
     }
}

]]>]]>

Комментарии

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

я на друпал орг выложил патч.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Доступны HTML теги: <em> <strong> <blockquote> <p> <br />
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Вы не робот?
4 + 12 =
Решите простую задачку и введите результат. Например для 1+3 введите 4