• Автор:

    Flesha
  • Добавлено:

    ноя 20, 2012
  • Комментариев:

    0
  • Просмотров:

    1 578

Хак ББ-коды в имени спойлера

Хак ББ-коды в имени спойлера

Заметил ужасную тенденцию, при просмотре старых новостей рушатся все бб-кды... Как оказалось это из-за того что в названии спойлера раньше использовались бб-коды а в новых версиях DLE это вызывает ошибку и не правильную обработку бб-кодов, в следствии чего все коды в новости не обрабатываются.

Причина этой проблемы заключена в том что бб-код спойлера обрабатываться раньше чем коды форматирования текста.

И казалось бы, продумать изначально что бы такого безобразия не появлялось довольно таки не сложно, но по какимто причинам этот момент в DLE остался не продуманным.

В файле /engine/classes/parse.class.php найти и удалить:

Для DLE 9.6 и ниже:
        $count_start = substr_count ($source, "[spoiler");
$count_end = substr_count ($source, "[/spoiler]");

if ($count_start AND $count_start == $count_end) {
$source = str_ireplace( "[spoiler=]", "[spoiler]", $source );
$source = preg_replace( "#\[spoiler\]#ie", "\$this->build_spoiler('')", $source );
$source = preg_replace( "#\[spoiler=(.+?)\]#ie", "\$this->build_spoiler('\\1')", $source );
$source = preg_replace( "#\[/spoiler\]#i", "<!--spoiler_text_end--></div><!--/dle_spoiler-->", $source );

}


Для DLE 9.7:
        $count_start = substr_count ($source, "[spoiler");
$count_end = substr_count ($source, "[/spoiler]");

if ($count_start AND $count_start == $count_end) {
$source = str_ireplace( "[spoiler=]", "[spoiler]", $source );

if ( !$this->allow_code ) {
$source = preg_replace( "#\[spoiler\](.+?)\[/spoiler\]#ies", "\$this->clear_div_tag(array('title' => '', 'txt' => '\\1'), 'spoiler')", $source );
$source = preg_replace( "#\[spoiler=(.+?)\](.+?)\[/spoiler\]#ies", "\$this->clear_div_tag(array('title' => '\\1', 'txt' => '\\2'), 'spoiler')", $source );
}

$source = preg_replace( "#\[spoiler\]#ie", "\$this->build_spoiler('')", $source );
$source = preg_replace( "#\[spoiler=(.+?)\]#ie", "\$this->build_spoiler('\\1')", $source );
$source = preg_replace( "#\[/spoiler\]#i", "<!--spoiler_text_end--></div><!--/dle_spoiler-->", $source );

}


Найти:
if( $this->allow_url ) {


Добавить выше вырезанный ранее код!

Этим мы сделали сначала обработку кодов форматирования текста, а уже после обработку спойлера.

Теперь давайте вырежем эти коды форматирования из названия спойлера.
В том же файле найти:
    function build_spoiler($title = "") {
global $lang;

$title = trim( $title );


Добавить ниже:
#*** FIX Title Spoiler by MSW * start ***#
$title = strip_tags( $title );
#*** FIX Title Spoiler by MSW * stop ***#


После в админке DLE можно запустить перестроение публикаций, что бы исправить во всех старых новостях эту проблему.

Автор: MSW
Сайт поддержки: 0-web.ru
Версия DLE: 9.* dle
Вернуться
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.