Незакрытые теги, валидация 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
я на друпал орг выложил патч.
Отправить комментарий