highlight_string()
В этой статье рассматривается функция PHP highlight_string(): её назначение, сигнатура, возвращаемое значение и примеры использования.
В этой статье мы рассмотрим функцию PHP highlight_string(). Мы разберём, что она делает, её сигнатуру и возвращаемое значение, способ захвата вывода в виде строки, распространённые ловушки и случаи, когда стоит рассмотреть другой подход.
Введение в функцию highlight_string()
highlight_string() — это встроенная функция PHP, которая возвращает или выводит HTML-версию строки с подсветкой синтаксиса PHP-кода. Она полезна, когда нужно отобразить читаемые, цветные примеры кода на веб-странице — например, в документации, записи блога или обучающем сайте — без написания собственного токенизатора.
Важно понимать, что highlight_string() подсвечивает только PHP-код, и этот код должен содержать открывающий тег <?php (или короткий тег), чтобы подсветка заработала. Обычный текст без тегов PHP в основном отображается как единый токен, поэтому ожидаемые цвета не появятся.
Сигнатура
highlight_string(string $string, bool $return = false): string|bool$string— PHP-код для подсветки.$return— еслиtrue, подсвеченный HTML возвращается в виде строки; еслиfalse(по умолчанию), он выводится напрямую, а функция возвращаетtrue.
Сгенерированная разметка использует встроенные атрибуты style="color: …", взятые из настроек ini highlight.* (таких как highlight.string и highlight.keyword).
Как использовать функцию highlight_string()
В простейшем виде вызовите функцию и передайте PHP-строку, которую нужно подсветить:
Как использовать функцию highlight_string()?
<?php
$string = '<?php echo "Hello, World!"; ?>';
highlight_string($string);
?>Это выводит HTML, похожий на следующий, прямо в браузер:
<pre><code style="color: #000000"><span style="color: #0000BB"><?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello, World!"</span><span style="color: #007700">; </span><span style="color: #0000BB">?></span></code></pre>В браузере ключевые слова, строки и теги отображаются разными цветами. Обратите внимание, что специальные символы < и > экранируются в < и >, поэтому подсвеченный код безопасно отображается как текст, а не интерпретируется как HTML.
Возврат вывода вместо его печати
По умолчанию highlight_string() немедленно выводит подсвеченный HTML. Передайте true вторым аргументом, если хотите захватить результат — например, чтобы закэшировать его, передать в шаблон или обернуть в дополнительную разметку перед отправкой на страницу:
Пример PHP highlight_string()
<?php
$string = '<?php echo "Hello, World!"; ?>';
$highlighted = highlight_string($string, true);
echo '<pre>' . $highlighted . '</pre>';
?>Поскольку функция уже оборачивает вывод в блок <pre><code>, обычно не нужно добавлять собственный <pre> — обёртка выше показана лишь для иллюстрации того, что $highlighted является обычной строкой, которую можно конкатенировать с чем угодно.
Ловушки и ограничения
- Код должен содержать теги PHP.
highlight_string('echo "hi";')(без<?php) обрабатывается как обычный текст и отображается без стилей. Оберните фрагмент в<?php … ?>заранее. - Входные данные не экранируются вами — это делает функция.
highlight_string()самостоятельно кодирует HTML-символы в коде, поэтому никогда не пропускайте входную строку черезhtmlspecialchars()заранее, иначе получите двойные сущности вроде&lt;. - Нет возможности добавить номера строк или CSS-классы. Цвета задаются встроенными атрибутами
style, взятыми из настроек inihighlight.*; встроенного способа добавить номера строк или пользовательские классы не существует. - Функция использует реальный токенизатор PHP. Синтаксически некорректный код может вызвать предупреждения, поскольку функция лексически анализирует входные данные так же, как это делает сам движок.
Для расширенной подсветки — пользовательские CSS-классы, номера строк или подсветка языков, отличных от PHP — разберите код самостоятельно с помощью token_get_all() и создайте собственную разметку, либо используйте специализированную библиотеку.
Связанные функции
- highlight_file() — тот же инструмент подсветки, но читает PHP-код из файла, а не из строки.
- htmlspecialchars() — экранирование специальных HTML-символов, когда вы не используете
highlight_string(). - htmlentities() — преобразование всех применимых символов в HTML-сущности.
- nl2br() — вставка тегов
<br>перед символами новой строки при отображении обычного текста.
Заключение
В заключение, функция highlight_string() — это встроенный инструмент для генерации форматированных PHP-строк с подсветкой синтаксиса. Понимая, как использовать функцию и её параметр возврата, вы можете воспользоваться этой возможностью для отображения читаемого, подсвеченного кода в своих веб-приложениях.