Preg_match_all bbcode неправильно работает

Рейтинг: -1Ответов: 2Опубликовано: 25.01.2023

Долго мучаюсь с bb кодами вида:

[show=home,category] Тут код простой, но внутри может быть повторение тегов, например: [show=home,category]этот текст должен выводится только в категориях[/show] и т.д.[/show]

На локалке срабатывает нормально, на сервере почему-то все исчезает, белая страница.
Сам код:

function tagShow( $matches ) {

    $regex = '/\[(show|not-show)=(.*?)\]((?>(?R)|.)*?)\[\/\1\]/is';

    if (is_array($matches)) {

        $pageType = $matches[2];
        $block = $matches[3];

        if ($matches[1] == "show") $action = true; else $action = false;

        $pages = explode(',', $pageType);

        if($action) { // показываем

            if(in_array($this->route["controller"], $pages)) $matches = $block; else $matches = '';

        } else { // не показываем

            if(in_array($this->route["controller"], $pages)) $matches = ''; else $matches = $block;
        }
    }

    return preg_replace_callback($regex, array( &$this, 'tagShow'), $matches);

}

Ответы

▲ -1

Чтобы видЕть ошибки вместо белой страницы, нужно прописать где-то в самом "верху" (с учетом импортов):

<?php
error_reporting(E_ALL);
?>

Теги же регулярками парсить такая себе идея... Лучше с помощью рекурсивного спуска все сделать

▲ -1

Возможно, на сервере возникает ошибка, которая вызывает белую страницу. Это могут быть ошибки синтаксиса, логики, исчерпание памяти PHP, и т. д. Чтобы увидеть эти ошибки, я бы рекомендовал вам включить отображение ошибок в PHP на сервере, добавив в начало вашего PHP-скрипта следующие строки:

php
error_reporting(E_ALL);
ini_set('display_errors', 1);

Это позволит отображать все ошибки в коде, так что вы сможете увидеть, что именно вызывает белую страницу, и исправить проблему.

Из кода, который вы предоставили, я не вижу явных ошибок, но есть несколько вещей, которые стоит проверить:

  1. Проверьте, правильно ли определена переменная $this->route["controller"].
  2. Убедитесь, что исходный текст передается в функцию tagShow в качестве параметра $matches.
  3. Попробуйте увеличить лимит памяти PHP на сервере, если обработка bb-кодов занимает много памяти.