Как использовать wp_specialchars_decode() в WordPress: руководство для начинающих

WP_SPECIALCHARS_DECODE() │ WP 2.8.0

Функция wp_specialchars_decode() помогает преобразовывать HTML-символы обратно в символы, которые вы видите на экране. Это полезно, когда нужно отобразить текст, который содержит специальные символы, такие как &, <, >, ", и '.

Основные моменты

  • Переводит: &, <, >, ", и '.
  • Параметр $quote_style: можно задать как ENT_COMPAT, чтобы декодировать только ", или ENT_QUOTES, чтобы декодировать и " и '. По умолчанию используется ENT_NOQUOTES, который ничего не декодирует.
  • Производительность:
    • Один раз — 0.000094 сек (очень быстро)
    • 50000 раз — 1.08 сек (быстро)
  • Хуки: нет.

Возвращаемое значение

Функция возвращает строку с декодированным текстом без HTML-сущностей.

Как использовать

Чтобы использовать функцию, вызывайте её так:

wp_specialchars_decode( $text, $quote_style );

Где:

  • $text (string) (обязательный) — текст, который нужно декодировать.
  • $quote_style (string|int) — указывает, как обрабатывать кавычки. Значения могут быть:
    • ENT_COMPAT — декодировать только двойные кавычки.
    • ENT_QUOTES — декодировать как одинарные, так и двойные кавычки.
    • ENT_NOQUOTES — не декодировать кавычки. (По умолчанию)

Примеры использования

Пример 1: Замена HTML-сущностей на привычные символы

$string = <<<'TEXT'
ampersand - & / & / &
one quote - ' / '
double quotes - " / " / "
more - > / >
less - < / <
TEXT;

echo wp_specialchars_decode( $string, ENT_QUOTES );

Вывод будет:

ampersand - & / & / &
one quote - ' / '
double quotes - " / " / "
more - > / >
less - < / <

Обратите внимание, что эта функция не декодирует все сущности. Например, она не декодирует (–). Если вы столкнётесь с такой проблемой, попробуйте использовать функцию html_entity_decode().

Изменения

  • С версии 2.8.0: Функция была добавлена.

Исходный код функции

function wp_specialchars_decode( $text, $quote_style = ENT_NOQUOTES ) {
    $text = (string) $text;

    if ( 0 === strlen( $text ) ) {
        return '';
    }

    // Если в строке нет сущностей, ничего не делаем.
    if ( ! str_contains( $text, '&' ) ) {
        return $text;
    }

    // Устанавливаем стиль кавычек по умолчанию.
    if ( empty( $quote_style ) ) {
        $quote_style = ENT_NOQUOTES;
    } elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) {
        $quote_style = ENT_QUOTES;
    }

    // Таблица замен
    $single = array(
        ''' => ''',
        ''' => ''',
    );
    $double = array(
        '"' => '"',
        '"' => '"',
        '"' => '"',
    );
    $others = array(
        '<'   => '<',
        '>'   => '>',
        '&'  => '&',
    );

    // Формируем конечную таблицу перевода в зависимости от $quote_style.
    if ( ENT_QUOTES === $quote_style ) {
        $translation = array_merge( $single, $double, $others );
    } elseif ( ENT_COMPAT === $quote_style || 'double' === $quote_style ) {
        $translation = array_merge( $double, $others );
    } elseif ( 'single' === $quote_style ) {
        $translation = array_merge( $single, $others );
    } elseif ( ENT_NOQUOTES === $quote_style ) {
        $translation = $others;
    }

    // Убираем нули в числовых сущностях и заменяем символы.
    return strtr( preg_replace( array_keys( $translation ), array_values( $translation ), $text ) );
}

Заключение

Функция wp_specialchars_decode() — это простое и эффективное решение для работы с HTML-сущностями в тексте. Применяйте её, когда нужно показать текст с символами, которые обычно заменяются на сущности, чтобы они отображались правильно на вашем сайте.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *