W3docs

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">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hello, World!"</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;</span></code></pre>

В браузере ключевые слова, строки и теги отображаются разными цветами. Обратите внимание, что специальные символы < и > экранируются в &lt; и &gt;, поэтому подсвеченный код безопасно отображается как текст, а не интерпретируется как 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() заранее, иначе получите двойные сущности вроде &amp;lt;.
  • Нет возможности добавить номера строк или CSS-классы. Цвета задаются встроенными атрибутами style, взятыми из настроек ini highlight.*; встроенного способа добавить номера строк или пользовательские классы не существует.
  • Функция использует реальный токенизатор PHP. Синтаксически некорректный код может вызвать предупреждения, поскольку функция лексически анализирует входные данные так же, как это делает сам движок.

Для расширенной подсветки — пользовательские CSS-классы, номера строк или подсветка языков, отличных от PHP — разберите код самостоятельно с помощью token_get_all() и создайте собственную разметку, либо используйте специализированную библиотеку.

Связанные функции

  • highlight_file() — тот же инструмент подсветки, но читает PHP-код из файла, а не из строки.
  • htmlspecialchars() — экранирование специальных HTML-символов, когда вы не используете highlight_string().
  • htmlentities() — преобразование всех применимых символов в HTML-сущности.
  • nl2br() — вставка тегов <br> перед символами новой строки при отображении обычного текста.

Заключение

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

Практика

Практика
Какова основная функция highlight_string() в PHP?
Какова основная функция highlight_string() в PHP?
Was this page helpful?