Highlight string: примеры (PHP)

Функция highlight_string для подсветки PHP кода
Раздел: Отладка
highlight_string(string $string, bool $return = false): string|bool

Функция highlight_string выводит или возвращает синтаксически подсвеченную версию PHP кода, используя цвета, определенные во встроенном синтаксическом анализаторе PHP.

Назначение и применение

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

Аргументы функции
bool|string highlight_string(string $code, bool $return = false)

$code - строка, содержащая PHP код, который необходимо подсветить. Код должен быть заключен в открывающие и закрывающие теги PHP ().

$return - необязательный булевый параметр. Если установлен в true, функция возвращает подсвеченный код как строку. По умолчанию false, что приводит к непосредственному выводу результата.

Базовые примеры
Простой вывод

Непосредственный вывод подсвеченного кода в браузер.

<?
highlight_string('<? echo "Hello, World!"; ?>');
?>
<? echo "Hello, World!"; ?>
Возврат строки

Сохранение результата в переменную для дальнейшей обработки.

<?
$result = highlight_string('<? $a = 10 + 5; ?>', true);
echo $result;
?>
<? $a = 10 + 5; ?>
Похожие функции в PHP

highlight_file($filename, $return = false) - подсвечивает синтаксис содержимого файла. Полезна для отображения исходного кода целых файлов.

show_source($filename) - псевдоним для highlight_file().

Функции token_get_all() и phptoken - предоставляют низкоуровневый доступ к лексемам PHP кода, позволяя создавать собственную логику подсветки.

Использование highlight_string предпочтительнее для работы с небольшими фрагментами кода в виде строк. highlight_file лучше подходит для отображения содержимого существующих файлов.

Типичные ошибки
Отсутствие тегов PHP

Если строка не содержит корректных тегов <?, код не будет распознан и подсвечен как обычный текст.

<?
highlight_string('echo "No tags";'); // Не сработает ожидаемо
?>
Некорректный синтаксис

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

<?
highlight_string('<? echo "Unclosed string; ?>', true);
?>
Использование с короткими тегами

Короткие теги (<?) могут не работать, если директива short_open_tag отключена в настройках PHP.

Изменения в версиях PHP

В PHP 7.4 были обновлены цвета подсветки по умолчанию для лучшего соответствия современным стандартам доступности и дизайна.

В PHP 8.0 продолжились внутренние улучшения лексического анализатора, что могло незначительно повлиять на детали разбора сложных конструкций, но интерфейс функции остался неизменным.

Функция show_source(), являющаяся псевдонимом highlight_file(), не рекомендуется к использованию, но пока не объявлена устаревшей.

Расширенные примеры
Сохранение в файл
Пример php
<?
$code = '<?
class Example {
    public function test() {
        return 42;
    }
}
?>';
$html = highlight_string($code, true);
file_put_contents('highlighted_code.html', $html);
?>
Обработка пользовательского ввода с проверкой
Пример php
<?
$userCode = $_POST['code_fragment'] ?? '';
if (!empty($userCode) && strpos($userCode, '<?') !== false) {
    // Для безопасности можно ограничить длину
    $safeCode = substr($userCode, 0, 5000);
    echo highlight_string($safeCode, false);
} else {
    echo 'Введите корректный PHP код';
}
?>
Комбинация с CSS для стилизации
Пример php

<?
$output = highlight_string('<? $var = [1, 2]; ?>', true);
$output = str_replace('', '', $output);
echo $output;
?>
Подсветка без вывода тегов <? ?>
Пример php
<?
$raw = highlight_string('<? $x = 5; ?>', true);
// Удаляем первый и последний span с тегами PHP
$clean = preg_replace('/^<\?php<\/span>|\s*\?><\/span>$/i', '', $raw);
echo trim($clean);
?>
$x = 5; 
Аналоги в других языках
Python (библиотека Pygments)
from pygments import highlight
from pygments.lexers import PhpLexer
from pygments.formatters import HtmlFormatter

code = '<? echo "Hi"; ?>'
highlighted = highlight(code, PhpLexer(), HtmlFormatter())
print(highlighted)
<? echo "Hi"; ?>

Pygments - это внешняя библиотека, требующая установки, но поддерживающая подсветку для сотен языков.

JavaScript (библиотека Prism.js или Highlight.js)
// Использование Highlight.js
// 
<?php echo "Test"; ?>
// hljs.highlightAll();

Библиотеки на стороне клиента не требуют обработки на сервере, но зависят от JavaScript в браузере.

PHP highlight_string function comments

En
Highlight string Syntax highlighting of a string