@Statium

Необходимо переписать preg_replace()?

Возникает ошибка
Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/u827956171/public_html/geshi/geshi.php on line 2202

Код примерно такой
if (false !== stristr($stuff_to_parse_pregquote, $keyword )) {
    $stuff_to_parse .= ' ';
    // Might make a more unique string for putting the number in soon
    // Basically, we don't put the styles in yet because then the styles themselves will
    // get highlighted if the language has a CSS keyword in it (like CSS, for example ;))
    $styles = "/$k/";
    $modifiers = ($this->language_data['CASE_SENSITIVE'][$k]) ? "e" : "ie";

    $disallowed_before = "a-zA-Z0-9\$_\|\#;>|^";
    $disallowed_after = "a-zA-Z0-9_<\|%\\-&";
    if(isset($this->language_data['PARSER_CONTROL'])) {
        if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
            if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'])) {
                $disallowed_before = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'];
            }
            if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'])) {
                $disallowed_after = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'];
            }
        }
    }
    $stuff_to_parse = preg_replace(
        "/([^$disallowed_before])($keyword)(?=[^$disallowed_after])/$modifiers",
        "'\\1' . $func2('\\2', '$k', 'BEGIN') . '<|$styles>' . $func('\\2') . '|>' . $func2('\\2', '$k', 'END')",
        $stuff_to_parse
    );

    $stuff_to_parse = substr($stuff_to_parse, 0, strlen($stuff_to_parse) - 1);
}

Помогите убрать ошибку
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 1
Folour
@Folour
Как-то так
...
    //Из модификаторов убрать e
    $modifiers = ($this->language_data['CASE_SENSITIVE'][$k]) ? '' : 'i';
...
    //Заменить это
    $stuff_to_parse = preg_replace(
        "/([^$disallowed_before])($keyword)(?=[^$disallowed_after])/$modifiers",
        "'\\1' . $func2('\\2', '$k', 'BEGIN') . '<|$styles>' . $func('\\2') . '|>' . $func2('\\2', '$k', 'END')",
        $stuff_to_parse
    );

    //На это
    $stuff_to_parse = preg_replace_callback(
        "/([^$disallowed_before])($keyword)(?=[^$disallowed_after])/$modifiers",
        function($matches) use($func, $func2, $styles, $k) {
        return $matches[1].
                   $func2($matches[2], $k, 'BEGIN').
                   '<|'.$styles.'>'.
                   $func($matches[2]).
                   '|>'.
                   $func2($matches[2], $k, 'END');
        },
        $stuff_to_parse
    );
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект